Javascript toFixed函数无法正常工作(请给出原因,而不是备选方案)

Javascript toFixed函数无法正常工作(请给出原因,而不是备选方案),javascript,math,Javascript,Math,toFixed()函数对浮点值的响应不同。 例如: var a = 2.555; var b = 5.555; console.log(a.toFixed(2)); /* output is 2.56 */ console.log(b.toFixed(2)); /* output is 5.55 */ 对于2.555/3.555,结果为(2.56/3.56) 及 对于其他值(并非所有值都确定),显示为#.55(#表示任何数字) 我很困惑,有人能帮我吗 提前谢谢。试试这个 toFix

toFixed()
函数对浮点值的响应不同。 例如:

 var a = 2.555;
 var b = 5.555;

console.log(a.toFixed(2));  /* output is 2.56 */ 
console.log(b.toFixed(2));  /* output is 5.55 */
对于2.555/3.555,结果为(2.56/3.56)

对于其他值(并非所有值都确定),显示为#.55(#表示任何数字)

我很困惑,有人能帮我吗

提前谢谢。

试试这个

toFixed()方法取决于浏览器舍入或保留

这是此问题的解决方案,请在末尾检查“5”

 var num = 5.555;
 var temp = num.toString();
if(temp .charAt(temp .length-1)==="5"){
temp = temp .slice(0,temp .length-1) + '6';
}
num = Number(temp);
Final = num.toFixed(2);
或者可重用的函数会是这样的

function toFixedCustom(num,upto){

     var temp = num.toString();
    if(temp .charAt(temp .length-1)==="5"){
    temp = temp .slice(0,temp .length-1) + '6';
    }
    num = Number(temp);
    Final = num.toFixed(upto);
    return Final;
}

var a = 2.555;
 var b = 5.555;

console.log(toFixedCustom(a,2));  
console.log(toFixedCustom(b,2));  

Javascript对数字使用二进制浮点表示(IEEE754)。 使用这种表示法,唯一可以精确表示的数字是n/2m形式,其中
n
m
都是整数

任何分母为2的整数幂的非有理数都不可能精确表示,因为在二进制中它是一个周期数(点后有无限个二进制数字)

数字
0.5
(即1/2)很好,(在二进制中仅为
0.1)₂),但例如
0.55
(即11/20)无法精确表示(在二进制中为
0.1000110011₂…
0.10(0011)₂带有最后一部分
0011₂重复无限次)

如果您需要执行任何计算,其中结果取决于精确的十进制数,则需要使用精确的十进制表示。如果小数位数是固定的(例如3),一个简单的解决方案是通过将所有值乘以1000将它们保持为整数

2.555 --> 2555
5.555 --> 5555
3.7   --> 3700
并在进行相应的乘法和除法时调整计算(例如,将两个数字相乘后,需要将结果除以1000)


IEEE754双精度格式的整数精度高达9007199254740992,这通常足以满足价格/值的要求(四舍五入是最常见的问题)。

此格式的可能重复项不是重复项,在上面的链接中,已批准的答案是toFixed()的替代项函数我不想要替代方法我不想知道toFixed()函数如此工作的确切原因@nodownvotesplz请检查此url:。希望它能帮助你。是的,这很好,谢谢你的回复,但我不寻找任何替代品。我想知道为什么这个(toFixed())函数的响应是这样的。检查这可能是你会很清楚的@IshanDemon如果你同意的话就从这里开始吧意味着请接受我的回答:)@IshanDemon不满意退出,尽管你的函数是toFixed()的一个很好的替代品
2.555 --> 2555
5.555 --> 5555
3.7   --> 3700