Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript浮点根据您输入变量的方式更改精度_Javascript_Floating Point_Precision - Fatal编程技术网

Javascript浮点根据您输入变量的方式更改精度

Javascript浮点根据您输入变量的方式更改精度,javascript,floating-point,precision,Javascript,Floating Point,Precision,EDIT:这不是关于JS中的浮点实现有多好或有多坏的讨论。这是一个非常特殊的情况,因此请不要将其标记为与浮点讨论的重复。 这是我用来计算以美分表示的金额的小数部分的脚本(例如,3.34是334美分): const金额=334; 常量十进制=数学真值(100*((金额/100)%1).toFixed(2)); console.log(十进制)//34分析这一点: const amount = 329; const decimal = Math.trunc(100 * ((amount / 100

EDIT:这不是关于JS中的浮点实现有多好或有多坏的讨论。这是一个非常特殊的情况,因此请不要将其标记为与浮点讨论的重复。

这是我用来计算以美分表示的金额的小数部分的脚本(例如,3.34是334美分):

const金额=334;
常量十进制=数学真值(100*((金额/100)%1).toFixed(2));
console.log(十进制)//34分析这一点:

const amount = 329;
const decimal = Math.trunc(100 * ((amount / 100) % 1).toFixed(2));
  • (((329/100)%1.toFixed(2))
    返回字符串
  • 如果将其转换回数字,则扫描到最接近的浮点0.289999999980。你可以用:
    (+((329/100)%1.toFixed(2)).toPrecision(18)
  • 然后将结果乘以100并截断,得到正确的值28
toFixed()
toPrecision()
这样的函数设计用于格式化最终输出的数字,但不用于数学计算

您的问题解决方案:

const amount = 329;
const decimal = amount % 100;
。。。或者如果数量可以是分数的浮动

const decimal = math.round(amount) % 100;

最后一点提示:这是一个关于浮点实现以及如何使用它的讨论;不仅仅是JS

这不是JavaScript浮点,而是IEEE浮点实现。我不知道为什么循环可以正常工作,但我建议您尽可能远离浮点,不只是
329%100
对您有效吗?使用模块100,例如:
334%100
100*((amount/100)%1)。toFixed(2)
执行与
(100*((x/100)%1))不同的计算。toFixed(2)
。括号很重要。@EricPostchil你明白了,我没有看到那些额外的括号。谢谢