如何避免 javascript 中的负 0 或 -0 值
How to avoid negative 0 or -0 values in javascript
我试过使用 toString()
和按位运算符 |
但我想使用精度和字符串输出。正如 @trincot 提到的,它是由例如精度值引起的。 -0.45 将导致 -0。我这里有代码。
typeof predictedHours //number e.g. -0.45
precision = 0
value={predictedHours.toFixed(precision)}
typeof value //string e.g. "-0"
问题 - 在这一行中是否有一个单行将 -0 转换为 0 - value={predictedHours.toFixed(precision)}
?
我不知道有什么特别干净的方法,但总有:
value={predictedHours.toFixed(precision).replace('-0', '0')}
我认为@trincot 的建议更好,以避免像 -0.48.toFixed(2)
这样的任何小数被转换为正数。我花了一段时间来理解正则表达式。不过有一点需要注意:由于运算符优先级的原因,当用括号括起来时,负数在 toFixed 中保持负数。这里有一些例子:
-0.001.toFixed(2).replace(/^-0$/, "0")
//0 '0'
console.log((-0.48).toFixed(0).replace(/^-0$/, '0')); Correct
//-0 '0'
console.log((-0.48).toFixed(2).replace(/^-0$/, '0')); Correct
//-0.48 '-0.48'
console.log(-0.48.toFixed(0).replace(/^-0$/, '0'));
//0 '0'
console.log(-0.48.toFixed(2).replace(/^-0$/, '0'));
//-0.48 '-0.48'
另请查看此处的示例 - toFixed()
你也可以做 value = +predictedHours.toFixed(precision) || 0
因为 -0 || 0
是 0
使用 Math.abs()
将 -0 替换为绝对数字,即 0。
我试过使用 toString()
和按位运算符 |
但我想使用精度和字符串输出。正如 @trincot 提到的,它是由例如精度值引起的。 -0.45 将导致 -0。我这里有代码。
typeof predictedHours //number e.g. -0.45
precision = 0
value={predictedHours.toFixed(precision)}
typeof value //string e.g. "-0"
问题 - 在这一行中是否有一个单行将 -0 转换为 0 - value={predictedHours.toFixed(precision)}
?
我不知道有什么特别干净的方法,但总有:
value={predictedHours.toFixed(precision).replace('-0', '0')}
我认为@trincot 的建议更好,以避免像 -0.48.toFixed(2)
这样的任何小数被转换为正数。我花了一段时间来理解正则表达式。不过有一点需要注意:由于运算符优先级的原因,当用括号括起来时,负数在 toFixed 中保持负数。这里有一些例子:
-0.001.toFixed(2).replace(/^-0$/, "0")
//0 '0'
console.log((-0.48).toFixed(0).replace(/^-0$/, '0')); Correct
//-0 '0'
console.log((-0.48).toFixed(2).replace(/^-0$/, '0')); Correct
//-0.48 '-0.48'
console.log(-0.48.toFixed(0).replace(/^-0$/, '0'));
//0 '0'
console.log(-0.48.toFixed(2).replace(/^-0$/, '0'));
//-0.48 '-0.48'
另请查看此处的示例 - toFixed()
你也可以做 value = +predictedHours.toFixed(precision) || 0
因为 -0 || 0
是 0
使用 Math.abs()
将 -0 替换为绝对数字,即 0。