Javascript浮点根据您输入变量的方式更改精度
EDIT:这不是关于JS中的浮点实现有多好或有多坏的讨论。这是一个非常特殊的情况,因此请不要将其标记为与浮点讨论的重复。 这是我用来计算以美分表示的金额的小数部分的脚本(例如,3.34是334美分):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
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你明白了,我没有看到那些额外的括号。谢谢