【问题标题】:Lodash rounding precisionLodash 舍入精度
【发布时间】:2015-11-26 22:51:33
【问题描述】:

我试图通过使用_.round 将数字显示为百分比,然后将该数字乘以 100。出于某种原因,当我将四舍五入的数字相乘时,精度会变得混乱。这是它的样子:

var num = 0.056789,
    roundingPrecision = 4,
    roundedNum = _.round(num, roundingPrecision),
    percent = (roundedNum * 100) + '%';

console.log(roundedNum); // 0.0568
console.log(percent); // 5.680000000000001%

fiddle

为什么0.000000000000001被乘以100后加上数字?

【问题讨论】:

  • 谢谢@JamesDonnelly!
  • 请为您自己的问题提供简洁的答案,@TimPerkins。引用的帖子可能涵盖了该主题,但不清楚具体如何。

标签: javascript rounding percentage lodash floating-point-precision


【解决方案1】:

这是因为数字在内部被表示为精度有限的二进制数。

另见"Is floating point math broken?"


浮点数学有问题吗?

0.1 + 0.2 == 0.3 -> 错误

0.1 + 0.2 -> 0.30000000000000004

任何想法为什么会发生这种情况?

得到了答案:

二进制floating point数学是这样的。在大多数编程语言中,它基于IEEE 754 standard。 JavaScript 使用 64 位浮点表示,与 Java 的double 相同。问题的症结在于,数字以这种格式表示为整数乘以 2 的幂。分母不是2的幂的有理数(如0.1,即1/10)无法精确表示。


要在您的情况下获得正确的结果,您需要在所有算术之后 进行舍入:

var num = 0.056789,
  roundingPrecision = 4,
  roundedNum = _.round(num * 100, roundingPrecision),
  percent = roundedNum + '%';

console.log(percent); // 5.0569%
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.min.js"></script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2016-12-19
    • 2013-07-22
    相关资源
    最近更新 更多