【问题标题】:toString and valueOf truncates trailing 0s after decimaltoString 和 valueOf 截断小数点后的尾随 0
【发布时间】:2010-05-20 15:31:50
【问题描述】:

在 javascript 中,我注意到 toString 和 valueOf 会截断小数点后的尾随 0。例如:

var num = 0.00
var num2 = 0.0100

num.valueOf() or num.toString() // outputs 0
num2.valueOf() or num2.toString() // outputs 0.01

这是正常行为吗?是否有办法保留尾随的 0?

编辑:我改变了我原来的问题,因为经过一些测试后我意识到以上是问题的根源。谢谢。

【问题讨论】:

  • 当你说它“不能正常工作”时,出了什么问题?您是否尝试过以某种方式对其进行调试?
  • 格式函数应该使用'style'变量来决定它应该输出多少个小数。当我使用第一种方法时,它会截断小数,但使用第二种方法正确输出。格式函数本身工作得很好,只有当我以上述方式传递样式时,所以我只是想知道在 format() (方法 1)部分或外部(方法 2)内部是否有 .toString 有区别)。
  • 好吧,您是否插入了一些“console.log”调用(用于 Firebug)或一些警报或其他任何东西,以查看该“typeof”返回的内容,以及该“toString”的结果是什么时候在 if 语句中调用?
  • 您能否包括您如何称呼formatNumber
  • @John Keyes,在上面添加了更多详细信息。 @Pointy 我尝试在将样式更改为字符串后警告样式,它返回对象预期错误。

标签: javascript tostring


【解决方案1】:

不是toString 也不是valueOf 会截断小数点后的尾随0!
当你这样写小数时:

var num2 = 0.0100

您是在告诉您的解释器变量 num2 应该包含十进制数 0.0100,即 0.01,因为最后两个零不重要。
十进制数是内存表示为十进制数:

0.0100
0.010
0.01
0.01000

都是相同的数字,因此它们在内存中的表示方式相同。无法区分它们。
因此,无法知道 num2 值 0.01 是否已被指定为使用零、一个、两个或多个尾随零写入该数字。

如果您想以写入方式存储十进制数,则必须将其存储为字符串。

【讨论】:

    【解决方案2】:

    JavaScript 中的 数字 没有尾随零 - 如果可以,你会在哪里停下来? 那是正常的行为。 如果你返回一个字符串,你可以强制它们出现 -

    var n= '0.0'
    alert(n)>> 0
    alert(n.toFixed(5))>> '0.00000'
    alert(n.toPrecision(5))>>'0.0000'
    

    【讨论】:

    • 如果您尝试将一个数字完全转换为字符串,并且该数字后面可能有 1 个零、2 个零、5 个零等,该怎么办?使用 toFixed 或 toPrecision 需要事先知道有多少个尾随零。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    相关资源
    最近更新 更多