【问题标题】:How JavaScript writes a number with 2 decimal place and it will show 0 in decimal?JavaScript如何写一个小数点后2位的数字,它会以十进制显示0?
【发布时间】:2020-07-19 13:42:12
【问题描述】:

JavaScript 写入一个小数点后 2 位的数字,它会在十进制中显示 0?

我不担心四舍五入,因为我只接受小数点后 2 位数字

let num = 2.60
console.log(num) // result 2.6

它将返回2.6,但我想要2.60。我可以使用to.Fixed(2),但它会以字符串格式返回。

let num = 1.23
console.log(num) // result 1.23

我知道to.Fixed(),但它返回字符串。我想要数字格式,它以数字格式而不是字符串格式显示 1.001.60。我使用了parseFloat(num.toFixed(2)),但它没有以十进制显示最后一个0 值。

【问题讨论】:

  • @David784 这个老问题的所有答案都很糟糕。根本问题是,JavaScript 与几乎所有现代主流语言一样,使用 二进制 浮点表示。
  • @Pointy 是的,我同意,解决这个问题的方法不是尝试更改数字,而是让不同的变量以特定数字所需的格式保存表示
  • 简单,你不能。如果您想要一个保留十进制 0 的视觉表示,那么您必须使用字符串,而不是任何数字格式。
  • 前导零和尾随零不是二进制浮点表示的一部分,因为它们对实际数值没有影响。事情就是这样。如果您希望显示一定数量的零,则转换为字符串以用于显示目的并保持存储不变。

标签: javascript node.js floating-point numbers decimalformat


【解决方案1】:

你永远不能改变 javascript 引擎如何表示浮点数,如果它是一个数字并且有足够的前导零,引擎认为它应该削减它然后它会这样做。

1.60浮点数其实更像1.6000000000000000888,你自己试试就知道了

console.log(1.60 === 1.6000000000000000888) // true

解决方案是在您想以所需格式显示值时使用toFixed,并且当您需要进行算术运算时使用parseFloat 将该值转换回来 - 就像您所做的那样,但只是有单独的视图和算术变量。

【讨论】:

    猜你喜欢
    • 2010-09-14
    • 2020-03-05
    • 2011-03-10
    • 2020-10-09
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多