【问题标题】:Remove trailing zeroes to 2 decimal positions删除尾随零到 2 个小数位
【发布时间】:2018-09-06 13:45:00
【问题描述】:

我希望您在以下方面提供帮助:我的价格可能超过 2 个小数点,即 0.009 或 0.0014

不过,我也有正常价格,例如 2.9 或 14.45。

我将所有价格存储到小数点后 4 位,即 2.9 变为 2.9000。

我正在寻找的是以下内容,我想显示至少 2 个小数点 num.toFixed(2),但是如果有超过 2 个小数点并且那些不是 0,我也想显示它们。

例子:

  • 2.9000 变为 2.90
  • 0.0001 仍然是 0.0001
  • 2.8540 变为 2.854
  • 1.0100 变成 1.01
  • 3.0000 变为 3.00

我试过num.toFixed(2) 但这会删除第二个之后的所有小数。

我怎样才能实现我在示例中展示的内容?

提前致谢!

【问题讨论】:

  • 3.0001 会发生什么?
  • @LucaKiebel 留下3.0001。如果浮点数不是 0,他想保留它们。
  • 是的,3.0001 仍然是 3.0001!
  • 仅供显示,所有存储将精确到小数点后4位。

标签: javascript price parsefloat


【解决方案1】:

不管怎样都缩短它,只返回与原始值相同的新数字。

function shortenOrReturn(num) {
  var shortNum = num.toFixed(2);
  return (shortNum == num) ? shortNum : num;
}

console.log(shortenOrReturn(2.9000)) // becomes 2.90
console.log(shortenOrReturn(0.0001)) // remains 0.0001
console.log(shortenOrReturn(2.8540)) // becomes 2.854
console.log(shortenOrReturn(1.0100)) // becomes 1.01
console.log(shortenOrReturn(3.0000)) // becomes 3.00

【讨论】:

  • 你领先我几分钟。
  • 这似乎很有魅力!我不明白它是如何只返回到小数点后 3 位的?如果原始数字有 4 个小数点......即3.0010 会返回 3.001 但是,输入是 3.0010 ?
  • JavaScript 对原始数字本身执行此操作,如果您使用字符串,则可以在末尾保留额外的 0,但是当它是数字时,JS 处理的只是额外的垃圾。在 JS 控制台中输入 3.0010 并观察它返回 3.001。
  • 啊,所以我的num.toString() 转换实际上对我不利.. 有趣的东西。 Javascript很奇怪.. .
  • 是的,我建议您研究编程中的原始数据类型,以便您真正掌握。我很确定如果 JavaScript 有一个口号,那就是“Javascript - 这很奇怪”。
【解决方案2】:

这是我的建议:

function removeZerosFromRight (input) {
      return Number(input.toString())
    }

示例:

  • removeZerosFromRight(123.0011) => 123.0011
  • removeZerosFromRight(123.0010) => 123.001
  • removeZerosFromRight(123.0100) => 123.01
  • removeZerosFromRight(123.1000) => 123.1
  • removeZerosFromRight(123.02) => 123.02

【讨论】:

  • 假设输入是一个数字,这个函数实际上并没有做任何事情,你可以立即返回输入并实现同样的事情。删除 0 是由于 JS 如何存储数字,而不是类型转换。有关更多详细信息,请查看我的答案中的 cmets。
  • 这在第一个 2.9000 应该变成 2.90 的测试用例中失败了
猜你喜欢
  • 2011-05-30
  • 1970-01-01
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多