0

我有一些简单的javascript,我想用它来确定一个数字是否需要四舍五入。

示例:用户输入 1.2346,数字四舍五入为 1.235,应向用户显示一条消息,通知他们该数字已四舍五入。四舍五入不是问题,但向用户显示错误消息是问题。我需要找到小数点后的位数。

我使用以下代码检索字符串的小数位。然后我计算变量的长度以获得小数位:

var dp = field_value - Math.floor(field_value);

1.23但是,当我对此进行测试时,我输入field_value. 当我检查字段值的值时,它确实是1.23. 当我检查 Math.floor(field_value) 的值时,它确实是1. 但后来我检查了 dp 的值,结果是0.22999999999999998

为什么这种减法不能按预期方式工作?

4

2 回答 2

1

问题在于浮点数具有有限表示,看看这里,你就会明白如何以及为什么。

如果舍入问题只是为了打印该数字,您可以使用sprintf for JS 之类的东西,它允许您根据需要格式化浮点输出。

于 2012-12-07T15:27:31.683 回答
0

试图用浮点数的表示做任何过于精确和具体的事情总是会遇到棘手的情况。正如其他人所指出的,这是 IEEE-754 浮点标准的属性。除了将其视为字符串并尝试分析数字之外,您还可以将其确定性地四舍五入为您想要的格式,执行以下操作:

function roundFloat(num, decimalPlaces) {
    multiplier = Math.pow(10, decimalPlaces);
    return Math.round(num * multiplier) / multiplier;
}
于 2012-12-07T15:43:02.710 回答