我想把这两个变量加起来:
xValue
是2.00000000(正面)
yValue
是-0.00001250(负数)
<%= xValue.toFixed(8) + yValue.toFixed(8) %>
输出正在变为:2.00000000-0.00001250
但我需要看到这个:= 1.9999875
如果我提取变量:
<%= xValue.toFixed(8) - yValue.toFixed(8) %>
没问题:= 2.0000125
我做错了什么?
首先,Number.toFixed(n)
返回一个字符串(小数点后面有n
数字),而不是数字。如果你想用数字做数学,推动它们通过toFixed
通常不是一个好主意(至于任何数学,他们应该转换回Number
类型)。
其次,+
操作在JS中被重载:对于数字,它是附加的,但对于字符串(即使只有一个操作数是一个字符串),它是操作数的连接。这正是你的情况所发生的:两个字符串 - 代表正数和负数 - 只是粘在一起。
(对于其余的算术运算,它不一样,顺便说一下;因此-
的正确结果)。
总的来说,这是表达你想要的一种可能的方法:
<%= (xValue + yValue).toFixed(8) %>
...但是这里有一个警告:JS中的浮动数学是有缺陷的设计。您只处理可以存储在内存中的浮点值的近似值。大多数时候,这些近似值将被toFixed()
正确地舍入,但有时候,they won't。