Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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:如何将数字四舍五入到2个非零小数_Javascript_Math_Rounding - Fatal编程技术网

Javascript:如何将数字四舍五入到2个非零小数

Javascript:如何将数字四舍五入到2个非零小数,javascript,math,rounding,Javascript,Math,Rounding,如果没有jQuery,如何将浮点数舍入为2个非零小数(但仅在需要时-1.5而不是1.50) 就这样, 2.50000000004 -> 2.5 2.652 -> 2.65 2.655 -> 2.66 0.00000204 -> 0.000002 0.00000205 -> 0.0000021 我尝试了以下代码: var r = n.toFixed(1-Math.floor(Math.log10(n))); 但是n=0.00000205意味着r=0.0000020

如果没有jQuery,如何将浮点数舍入为2个非零小数(但仅在需要时-1.5而不是1.50)

就这样,

2.50000000004 -> 2.5
2.652 -> 2.65
2.655 -> 2.66
0.00000204 -> 0.000002
0.00000205 -> 0.0000021
我尝试了以下代码:

var r = n.toFixed(1-Math.floor(Math.log10(n)));
但是
n=0.00000205
意味着
r=0.0000020
,这与上述条件相冲突。
但是
n=0.0000020501
意味着
r=0.0000021
,这是正常的,因此误差仅为5作为最后一个小数点,应该向上舍入。

这应该满足您的要求:

函数两位小数(n){
变量log10=n?数学楼层(数学log10(n)):0,
div=log10<0?数学功率(10,1-log10):100;
返回数学四舍五入(n*div)/div;
}
var测试=[
2.50000000004,
2.652,
2.655,
0.00000204,
0.00000205,
0.00000605
];
测试forEach(函数(n){
log(n',->',两位小数(n));

});这应该满足您的要求:

函数两位小数(n){
变量log10=n?数学楼层(数学log10(n)):0,
div=log10<0?数学功率(10,1-log10):100;
返回数学四舍五入(n*div)/div;
}
var测试=[
2.50000000004,
2.652,
2.655,
0.00000204,
0.00000205,
0.00000605
];
测试forEach(函数(n){
log(n',->',两位小数(n));

});可能重复的@PrasadShinde这将最后2个示例取整为0,这不是OP想要的。它不是重复的。我不想四舍五入到小数点后2位,我想四舍五入到小数点后2位非零。你要找的术语是“四舍五入到精度”。请参阅获得
0.000020
的原因,因为这与浮点表示的不精确性有关
0.0000205
不能以浮点形式精确表示为该值。对于可能的数字,结果正如您所期望的。注意:尝试这样做的特殊编码函数可能都会遇到相同的问题。@PrasadShinde的可能重复将最后2个示例取整为0,这不是OP想要的。它不是重复。我不想四舍五入到小数点后2位,我想四舍五入到小数点后2位非零。你要找的术语是“四舍五入到精度”。请参阅获得
0.000020
的原因,因为这与浮点表示的不精确性有关
0.0000205
不能以浮点形式精确表示为该值。对于可能的数字,结果正如您所期望的。注意:尝试这样做的特殊编码函数可能都会遇到相同的问题。
n=0.00000305
被正确地四舍五入到
0.0000031
,但是
n=0.00000605
被四舍五入到
0.000006
,而不是
0.0000061
。是的,更好一点。Idk为什么,但仍有一些值未正确舍入,如
0.00000105
0.00000805
。唉,这些值是通过编码执行的不可避免的近似结果<代码>控制台.log(0.0000105*1E7)->10.4999999998
是的,我可以看到它
0.000008050000000000001
被正确舍入……几个非常特殊的值并不重要。谢谢大家!
n=0.00000305
被正确地四舍五入到
0.0000031
,但是
n=0.00000605
被四舍五入到
0.000006
,而不是
0.0000061
。是的,更好一点。Idk为什么,但仍有一些值未正确舍入,如
0.00000105
0.00000805
。唉,这些值是通过编码执行的不可避免的近似结果<代码>控制台.log(0.0000105*1E7)->10.4999999998
是的,我可以看到它
0.000008050000000000001
被正确舍入……几个非常特殊的值并不重要。非常感谢。