为什么10000000000000.126.toString()
1000000000000.127和100000000000.126.toString()
不是?为什么10000000000000.126.toString()1000000000000.127(以及我能做些什么来防止它)?
我认为它必须与Js中一个数字的最大值有关(按照this SO question),但是这与浮点运算有关吗?
我在问,因为我写了这个函数来使用数千个分隔符来格式化一个数字,并且想要阻止这个。
function th(n,sep) {
sep = sep || '.';
var dec = n.toString().split(/[,.]/),
nArr = dec[0].split(''),
isDot = /\./.test(sep);
return function tt(n) {
return n.length > 3 ?
tt(n.slice(0,n.length-3)).concat(n.slice(n.length-3).join('')) :
[n.join('')]
;
}(nArr)
.join(sep)
+ (dec[1] ? (isDot?',':'.') + dec[1] : '');
}
sep1000(10000000000000.126); //=> 10.000.000.000.000,127
sep1000(1000000000000.126); //=> 1.000.000.000.000,126
这是因为我们的老朋友浮点精度。 – deceze
[为什么C浮点类型修改输出的实际输入125.1到125.099998?](http://stackoverflow.com/questions/6532502/why-does-ac-floating-point-type-modify - 实际输入125-1至125-099998-o)和**许多其他** – Alnitak
@Alnitak,我知道,但另外我正在寻找一种方法来防止它。我仍然在寻找相关的答案,真的。 – KooiInc