JS浮点导致舍入不正确-Math.round()足够安全吗?

问题描述 投票:0回答:1

乘积后,我有一些带有浮点数的情况。

我必须将数字四舍五入到最接近的百位,但是在这种情况下:

115000*4.35 //500249.99999999994

我会得到错误的结果:

Math.round(115000*4.35 / 100) * 100 //500200

而不是500300

解决方案:

第一次舍入到最接近的小数点后一位:

  Math.round(500249.99999999994 * 10) / 10 //200250,

然后四舍五入到最接近的百位数:

Math.round(500250 / 100) * 100 //200300

组合:

Math.round(Math.round(num * 10) / 1000) * 100 

有人知道这是否是解决问题的安全方法吗?它总是有效吗?

提前感谢!

javascript floating-point mat
1个回答
1
投票

四舍五入到最接近的整数可以简单地通过调用

Math.round(500249.99999999994)

因此四舍五入为最接近的百位数:

const num = 115000*4.35;

const roundedToNearestHundred = Math.round(Math.round(num) / 100) * 100;

console.log(roundedToNearestHundred);
© www.soinside.com 2019 - 2024. All rights reserved.