在javascript中不带舍入的十进制比较

Decimal Comparison without rounding in javascript

本文关键字:十进制 比较 舍入 javascript      更新时间:2023-09-26

我有 2 个用于十进制值的文本框,我需要在 JavaScript 中比较它们。场景是

var first = $('#txtFirst').val();
var second= $('#txtSecond').val();

在文本框中,我输入以下值

  • 第一个 => 99999999999998.999999997

  • 第二个 => 99999999999998.9999999991

我尝试了以下代码

     if (parseFloat(parseFloat(first).toFixed(10)) <= parseFloat(parseFloat(second).toFixed(10))) 

这将返回 true,因为它对其进行四舍五入,因此两个值都变为99999999999999。如何解决?

只需比较而不转换为整数

var first = $('#txtFirst').val();
var second= $('#txtSecond').val();
if ( first == second )
{
  // they are equal
}

如果您想比较最多 10 位小数,那么

var first10Decimals  = first.split(".").pop().substring(0,10);
var second10Decimals  = second.split(".").pop().substring(0,10);
if ( first10Decimals  == second10Decimals )
{
   //they are equal
}

Vanilla JavaScript 无法处理如此大的数字。你应该使用像 big.js 这样的东西,它旨在处理任意大数字:

  • GitHub : https://github.com/MikeMcl/big.js/

  • 文档 : https://mikemcl.github.io/big.js/