Float Toolkit

NPM latest versionNPM downloadsTests statusCode coverage with CodecovContributor Covenant Code of Conduct

Float Toolkit is a lightweight, dependency-less NPM package that allows you to work with floats (floating-point numbers, or numbers with decimals).

You can round floats down to any number of digits, and perform accurate math operations (addition, subtraction, multiplication and division) with them.

Features

  • Accurate math operations
  • Round floats to any number of digits
  • No dependencies
  • TypeScript type declarations
  • Compatible with browsers and Node.js
  • > 95% code coverage

Get started

Installation

To add Float Toolkit to your project, run this command:

npm install @float-toolkit/core

Usage

The package export is a class called FloatToolkit. Once you import it, you can create multiple FloatToolkit instances.

importFloatToolkitfrom"@float-toolkit/core";constft=newFloatToolkit();console.log(0.1+0.2);// 0.30000000000000004console.log(ft.round(0.1+0.2));// 0.3console.log(ft.add([0.1,0.2]));// 0.3

TypeScript

Float Toolkit is written in TypeScript. As such, you will have full type checking in your TypeScript projects. The type definitions used by the package are exported on their own or through the FloatToolkit namespace.

importFloatToolkitfrom"@float-toolkit/core";constcreateFT=(options: FloatToolkit.Options)=>newFloatToolkit(5,options);

Why use Float Toolkit?

In JavaScript, certain math operations with floats can return values with slight imperfections. This can result in unexpected behavior.

constresult=0.1+0.2;// 0.30000000000000004console.log(result===0.3);// false

Often, developers address this issue by accepting a certain range of floats that includes the exact one they are looking for, like so:

console.log(result>=0.299&&result<=0.301);// true

This is not ideal, since this condition also becomes true if another value falls in the same range, even if it's not the expected value. For example, a value of 0.3005 would also pass this condition.

Another options is to round the number using Vanilla JS functions.

constroundedResult=Number(result.toFixed(1));// 0.3console.log(roundedResult===0.3);// true

This alternative fixes the main problem the previous solution has, but it also increases the amount of boilerplate code, since it requires you to add Number(variable.toFixed(precision)) for every single number.

The Float Toolkit syntax is much cleaner and more concise.

constresult=ft.add([0.1,0.2]);// 0.3console.log(result===0.3);// true

Support

Need help using Float Toolkit? Don't hesitate to reach out on GitHub Discussions!

Links

Child packages

Contributing

Before creating an issue, please consider the following:

About

Float Toolkit is an NPM package for working with floating-point numbers.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Float Toolkit

NPM latest versionNPM downloadsTests statusCode coverage with CodecovContributor Covenant Code of Conduct

Float Toolkit is a lightweight, dependency-less NPM package that allows you to work with floats (floating-point numbers, or numbers with decimals).

You can round floats down to any number of digits, and perform accurate math operations (addition, subtraction, multiplication and division) with them.

Features

  • Accurate math operations
  • Round floats to any number of digits
  • No dependencies
  • TypeScript type declarations
  • Compatible with browsers and Node.js
  • > 95% code coverage

Get started

Installation

To add Float Toolkit to your project, run this command:

npm install @float-toolkit/core

Usage

The package export is a class called FloatToolkit. Once you import it, you can create multiple FloatToolkit instances.

importFloatToolkitfrom"@float-toolkit/core";constft=newFloatToolkit();console.log(0.1+0.2);// 0.30000000000000004console.log(ft.round(0.1+0.2));// 0.3console.log(ft.add([0.1,0.2]));// 0.3

TypeScript

Float Toolkit is written in TypeScript. As such, you will have full type checking in your TypeScript projects. The type definitions used by the package are exported on their own or through the FloatToolkit namespace.

importFloatToolkitfrom"@float-toolkit/core";constcreateFT=(options: FloatToolkit.Options)=>newFloatToolkit(5,options);

Why use Float Toolkit?

In JavaScript, certain math operations with floats can return values with slight imperfections. This can result in unexpected behavior.

constresult=0.1+0.2;// 0.30000000000000004console.log(result===0.3);// false

Often, developers address this issue by accepting a certain range of floats that includes the exact one they are looking for, like so:

console.log(result>=0.299&&result<=0.301);// true

This is not ideal, since this condition also becomes true if another value falls in the same range, even if it's not the expected value. For example, a value of 0.3005 would also pass this condition.

Another options is to round the number using Vanilla JS functions.

constroundedResult=Number(result.toFixed(1));// 0.3console.log(roundedResult===0.3);// true

This alternative fixes the main problem the previous solution has, but it also increases the amount of boilerplate code, since it requires you to add Number(variable.toFixed(precision)) for every single number.

The Float Toolkit syntax is much cleaner and more concise.

constresult=ft.add([0.1,0.2]);// 0.3console.log(result===0.3);// true

Support

Need help using Float Toolkit? Don't hesitate to reach out on GitHub Discussions!

Links

Child packages

Contributing

Before creating an issue, please consider the following:

About

Float Toolkit is an NPM package for working with floating-point numbers.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Float Toolkit

NPM latest versionNPM downloadsTests statusCode coverage with CodecovContributor Covenant Code of Conduct

Float Toolkit is a lightweight, dependency-less NPM package that allows you to work with floats (floating-point numbers, or numbers with decimals).

You can round floats down to any number of digits, and perform accurate math operations (addition, subtraction, multiplication and division) with them.

Features

  • Accurate math operations
  • Round floats to any number of digits
  • No dependencies
  • TypeScript type declarations
  • Compatible with browsers and Node.js
  • > 95% code coverage

Get started

Installation

To add Float Toolkit to your project, run this command:

npm install @float-toolkit/core

Usage

The package export is a class called FloatToolkit. Once you import it, you can create multiple FloatToolkit instances.

importFloatToolkitfrom"@float-toolkit/core";constft=newFloatToolkit();console.log(0.1+0.2);// 0.30000000000000004console.log(ft.round(0.1+0.2));// 0.3console.log(ft.add([0.1,0.2]));// 0.3

TypeScript

Float Toolkit is written in TypeScript. As such, you will have full type checking in your TypeScript projects. The type definitions used by the package are exported on their own or through the FloatToolkit namespace.

importFloatToolkitfrom"@float-toolkit/core";constcreateFT=(options: FloatToolkit.Options)=>newFloatToolkit(5,options);

Why use Float Toolkit?

In JavaScript, certain math operations with floats can return values with slight imperfections. This can result in unexpected behavior.

constresult=0.1+0.2;// 0.30000000000000004console.log(result===0.3);// false

Often, developers address this issue by accepting a certain range of floats that includes the exact one they are looking for, like so:

console.log(result>=0.299&&result<=0.301);// true

This is not ideal, since this condition also becomes true if another value falls in the same range, even if it's not the expected value. For example, a value of 0.3005 would also pass this condition.

Another options is to round the number using Vanilla JS functions.

constroundedResult=Number(result.toFixed(1));// 0.3console.log(roundedResult===0.3);// true

This alternative fixes the main problem the previous solution has, but it also increases the amount of boilerplate code, since it requires you to add Number(variable.toFixed(precision)) for every single number.

The Float Toolkit syntax is much cleaner and more concise.

constresult=ft.add([0.1,0.2]);// 0.3console.log(result===0.3);// true

Support

Need help using Float Toolkit? Don't hesitate to reach out on GitHub Discussions!

Links

Child packages

Contributing

Before creating an issue, please consider the following:

About

Float Toolkit is an NPM package for working with floating-point numbers.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Float Toolkit

NPM latest versionNPM downloadsTests statusCode coverage with CodecovContributor Covenant Code of Conduct

Float Toolkit is a lightweight, dependency-less NPM package that allows you to work with floats (floating-point numbers, or numbers with decimals).

You can round floats down to any number of digits, and perform accurate math operations (addition, subtraction, multiplication and division) with them.

Features

  • Accurate math operations
  • Round floats to any number of digits
  • No dependencies
  • TypeScript type declarations
  • Compatible with browsers and Node.js
  • > 95% code coverage

Get started

Installation

To add Float Toolkit to your project, run this command:

npm install @float-toolkit/core

Usage

The package export is a class called FloatToolkit. Once you import it, you can create multiple FloatToolkit instances.

importFloatToolkitfrom"@float-toolkit/core";constft=newFloatToolkit();console.log(0.1+0.2);// 0.30000000000000004console.log(ft.round(0.1+0.2));// 0.3console.log(ft.add([0.1,0.2]));// 0.3

TypeScript

Float Toolkit is written in TypeScript. As such, you will have full type checking in your TypeScript projects. The type definitions used by the package are exported on their own or through the FloatToolkit namespace.

importFloatToolkitfrom"@float-toolkit/core";constcreateFT=(options: FloatToolkit.Options)=>newFloatToolkit(5,options);

Why use Float Toolkit?

In JavaScript, certain math operations with floats can return values with slight imperfections. This can result in unexpected behavior.

constresult=0.1+0.2;// 0.30000000000000004console.log(result===0.3);// false

Often, developers address this issue by accepting a certain range of floats that includes the exact one they are looking for, like so:

console.log(result>=0.299&&result<=0.301);// true

This is not ideal, since this condition also becomes true if another value falls in the same range, even if it's not the expected value. For example, a value of 0.3005 would also pass this condition.

Another options is to round the number using Vanilla JS functions.

constroundedResult=Number(result.toFixed(1));// 0.3console.log(roundedResult===0.3);// true

This alternative fixes the main problem the previous solution has, but it also increases the amount of boilerplate code, since it requires you to add Number(variable.toFixed(precision)) for every single number.

The Float Toolkit syntax is much cleaner and more concise.

constresult=ft.add([0.1,0.2]);// 0.3console.log(result===0.3);// true

Support

Need help using Float Toolkit? Don't hesitate to reach out on GitHub Discussions!

Links

Child packages

Contributing

Before creating an issue, please consider the following:

About

Float Toolkit is an NPM package for working with floating-point numbers.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Float Toolkit

NPM latest versionNPM downloadsTests statusCode coverage with CodecovContributor Covenant Code of Conduct

Float Toolkit is a lightweight, dependency-less NPM package that allows you to work with floats (floating-point numbers, or numbers with decimals).

You can round floats down to any number of digits, and perform accurate math operations (addition, subtraction, multiplication and division) with them.

Features

  • Accurate math operations
  • Round floats to any number of digits
  • No dependencies
  • TypeScript type declarations
  • Compatible with browsers and Node.js
  • > 95% code coverage

Get started

Installation

To add Float Toolkit to your project, run this command:

npm install @float-toolkit/core

Usage

The package export is a class called FloatToolkit. Once you import it, you can create multiple FloatToolkit instances.

importFloatToolkitfrom"@float-toolkit/core";constft=newFloatToolkit();console.log(0.1+0.2);// 0.30000000000000004console.log(ft.round(0.1+0.2));// 0.3console.log(ft.add([0.1,0.2]));// 0.3

TypeScript

Float Toolkit is written in TypeScript. As such, you will have full type checking in your TypeScript projects. The type definitions used by the package are exported on their own or through the FloatToolkit namespace.

importFloatToolkitfrom"@float-toolkit/core";constcreateFT=(options: FloatToolkit.Options)=>newFloatToolkit(5,options);

Why use Float Toolkit?

In JavaScript, certain math operations with floats can return values with slight imperfections. This can result in unexpected behavior.

constresult=0.1+0.2;// 0.30000000000000004console.log(result===0.3);// false

Often, developers address this issue by accepting a certain range of floats that includes the exact one they are looking for, like so:

console.log(result>=0.299&&result<=0.301);// true

This is not ideal, since this condition also becomes true if another value falls in the same range, even if it's not the expected value. For example, a value of 0.3005 would also pass this condition.

Another options is to round the number using Vanilla JS functions.

constroundedResult=Number(result.toFixed(1));// 0.3console.log(roundedResult===0.3);// true

This alternative fixes the main problem the previous solution has, but it also increases the amount of boilerplate code, since it requires you to add Number(variable.toFixed(precision)) for every single number.

The Float Toolkit syntax is much cleaner and more concise.

constresult=ft.add([0.1,0.2]);// 0.3console.log(result===0.3);// true

Support

Need help using Float Toolkit? Don't hesitate to reach out on GitHub Discussions!

Links

Child packages

Contributing

Before creating an issue, please consider the following:

About

Float Toolkit is an NPM package for working with floating-point numbers.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Float Toolkit

NPM latest versionNPM downloadsTests statusCode coverage with CodecovContributor Covenant Code of Conduct

Float Toolkit is a lightweight, dependency-less NPM package that allows you to work with floats (floating-point numbers, or numbers with decimals).

You can round floats down to any number of digits, and perform accurate math operations (addition, subtraction, multiplication and division) with them.

Features

  • Accurate math operations
  • Round floats to any number of digits
  • No dependencies
  • TypeScript type declarations
  • Compatible with browsers and Node.js
  • > 95% code coverage

Get started

Installation

To add Float Toolkit to your project, run this command:

npm install @float-toolkit/core

Usage

The package export is a class called FloatToolkit. Once you import it, you can create multiple FloatToolkit instances.

importFloatToolkitfrom"@float-toolkit/core";constft=newFloatToolkit();console.log(0.1+0.2);// 0.30000000000000004console.log(ft.round(0.1+0.2));// 0.3console.log(ft.add([0.1,0.2]));// 0.3

TypeScript

Float Toolkit is written in TypeScript. As such, you will have full type checking in your TypeScript projects. The type definitions used by the package are exported on their own or through the FloatToolkit namespace.

importFloatToolkitfrom"@float-toolkit/core";constcreateFT=(options: FloatToolkit.Options)=>newFloatToolkit(5,options);

Why use Float Toolkit?

In JavaScript, certain math operations with floats can return values with slight imperfections. This can result in unexpected behavior.

constresult=0.1+0.2;// 0.30000000000000004console.log(result===0.3);// false

Often, developers address this issue by accepting a certain range of floats that includes the exact one they are looking for, like so:

console.log(result>=0.299&&result<=0.301);// true

This is not ideal, since this condition also becomes true if another value falls in the same range, even if it's not the expected value. For example, a value of 0.3005 would also pass this condition.

Another options is to round the number using Vanilla JS functions.

constroundedResult=Number(result.toFixed(1));// 0.3console.log(roundedResult===0.3);// true

This alternative fixes the main problem the previous solution has, but it also increases the amount of boilerplate code, since it requires you to add Number(variable.toFixed(precision)) for every single number.

The Float Toolkit syntax is much cleaner and more concise.

constresult=ft.add([0.1,0.2]);// 0.3console.log(result===0.3);// true

Support

Need help using Float Toolkit? Don't hesitate to reach out on GitHub Discussions!

Links

Child packages

Contributing

Before creating an issue, please consider the following:

About

Float Toolkit is an NPM package for working with floating-point numbers.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Float Toolkit

NPM latest versionNPM downloadsTests statusCode coverage with CodecovContributor Covenant Code of Conduct

Float Toolkit is a lightweight, dependency-less NPM package that allows you to work with floats (floating-point numbers, or numbers with decimals).

You can round floats down to any number of digits, and perform accurate math operations (addition, subtraction, multiplication and division) with them.

Features

  • Accurate math operations
  • Round floats to any number of digits
  • No dependencies
  • TypeScript type declarations
  • Compatible with browsers and Node.js
  • > 95% code coverage

Get started

Installation

To add Float Toolkit to your project, run this command:

npm install @float-toolkit/core

Usage

The package export is a class called FloatToolkit. Once you import it, you can create multiple FloatToolkit instances.

importFloatToolkitfrom"@float-toolkit/core";constft=newFloatToolkit();console.log(0.1+0.2);// 0.30000000000000004console.log(ft.round(0.1+0.2));// 0.3console.log(ft.add([0.1,0.2]));// 0.3

TypeScript

Float Toolkit is written in TypeScript. As such, you will have full type checking in your TypeScript projects. The type definitions used by the package are exported on their own or through the FloatToolkit namespace.

importFloatToolkitfrom"@float-toolkit/core";constcreateFT=(options: FloatToolkit.Options)=>newFloatToolkit(5,options);

Why use Float Toolkit?

In JavaScript, certain math operations with floats can return values with slight imperfections. This can result in unexpected behavior.

constresult=0.1+0.2;// 0.30000000000000004console.log(result===0.3);// false

Often, developers address this issue by accepting a certain range of floats that includes the exact one they are looking for, like so:

console.log(result>=0.299&&result<=0.301);// true

This is not ideal, since this condition also becomes true if another value falls in the same range, even if it's not the expected value. For example, a value of 0.3005 would also pass this condition.

Another options is to round the number using Vanilla JS functions.

constroundedResult=Number(result.toFixed(1));// 0.3console.log(roundedResult===0.3);// true

This alternative fixes the main problem the previous solution has, but it also increases the amount of boilerplate code, since it requires you to add Number(variable.toFixed(precision)) for every single number.

The Float Toolkit syntax is much cleaner and more concise.

constresult=ft.add([0.1,0.2]);// 0.3console.log(result===0.3);// true

Support

Need help using Float Toolkit? Don't hesitate to reach out on GitHub Discussions!

Links

Child packages

Contributing

Before creating an issue, please consider the following:

About

Float Toolkit is an NPM package for working with floating-point numbers.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Float Toolkit

NPM latest versionNPM downloadsTests statusCode coverage with CodecovContributor Covenant Code of Conduct

Float Toolkit is a lightweight, dependency-less NPM package that allows you to work with floats (floating-point numbers, or numbers with decimals).

You can round floats down to any number of digits, and perform accurate math operations (addition, subtraction, multiplication and division) with them.

Features

  • Accurate math operations
  • Round floats to any number of digits
  • No dependencies
  • TypeScript type declarations
  • Compatible with browsers and Node.js
  • > 95% code coverage

Get started

Installation

To add Float Toolkit to your project, run this command:

npm install @float-toolkit/core

Usage

The package export is a class called FloatToolkit. Once you import it, you can create multiple FloatToolkit instances.

importFloatToolkitfrom"@float-toolkit/core";constft=newFloatToolkit();console.log(0.1+0.2);// 0.30000000000000004console.log(ft.round(0.1+0.2));// 0.3console.log(ft.add([0.1,0.2]));// 0.3

TypeScript

Float Toolkit is written in TypeScript. As such, you will have full type checking in your TypeScript projects. The type definitions used by the package are exported on their own or through the FloatToolkit namespace.

importFloatToolkitfrom"@float-toolkit/core";constcreateFT=(options: FloatToolkit.Options)=>newFloatToolkit(5,options);

Why use Float Toolkit?

In JavaScript, certain math operations with floats can return values with slight imperfections. This can result in unexpected behavior.

constresult=0.1+0.2;// 0.30000000000000004console.log(result===0.3);// false

Often, developers address this issue by accepting a certain range of floats that includes the exact one they are looking for, like so:

console.log(result>=0.299&&result<=0.301);// true

This is not ideal, since this condition also becomes true if another value falls in the same range, even if it's not the expected value. For example, a value of 0.3005 would also pass this condition.

Another options is to round the number using Vanilla JS functions.

constroundedResult=Number(result.toFixed(1));// 0.3console.log(roundedResult===0.3);// true

This alternative fixes the main problem the previous solution has, but it also increases the amount of boilerplate code, since it requires you to add Number(variable.toFixed(precision)) for every single number.

The Float Toolkit syntax is much cleaner and more concise.

constresult=ft.add([0.1,0.2]);// 0.3console.log(result===0.3);// true

Support

Need help using Float Toolkit? Don't hesitate to reach out on GitHub Discussions!

Links

Child packages

Contributing

Before creating an issue, please consider the following:

About

Float Toolkit is an NPM package for working with floating-point numbers.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages