我有以下 JavaScript 语法:
var discount = Math.round(100 - (price / listprice) * 100);
这四舍五入为整数。如何返回两位小数的结果?
原文由 Smudger 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有以下 JavaScript 语法:
var discount = Math.round(100 - (price / listprice) * 100);
这四舍五入为整数。如何返回两位小数的结果?
原文由 Smudger 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您使用一元加号将字符串转换为数字 ,如 MDN 中所述。
例如: +discount.toFixed(2)
原文由 John Gietzen 发布,翻译遵循 CC BY-SA 3.0 许可协议
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
注意 - 如果 3 位精度很重要,请参阅编辑 4
toFixed 将根据超过 2 位小数的值向上或向下舍入。
示例:http: //jsfiddle.net/calder12/tv9HY/
文档: https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed
编辑- 正如其他人所提到的,这会将结果转换为字符串。为了避免这种情况:
编辑 2 - 正如评论中还提到的,此函数在某些精度上失败,例如,在 1.005 的情况下,它将返回 1.00 而不是 1.01。如果这种程度的准确性很重要,我找到了这个答案: https ://stackoverflow.com/a/32605063/1726511 这似乎适用于我尝试过的所有测试。
虽然需要进行一个小的修改,上面链接的答案中的函数在四舍五入时会返回整数,因此例如 99.004 将返回 99 而不是 99.00,这不适合显示价格。
编辑 3 - 似乎在实际返回时 toFixed 仍然搞砸了一些数字,这个最终编辑似乎有效。哎呀,这么多返工!
请参阅此处的小提琴示例: https ://jsfiddle.net/calder12/3Lbhfy5s/
编辑 4 - 你们要杀了我。编辑 3 在负数上失败,没有深入研究为什么在进行舍入之前将负数变为正数更容易,然后在返回结果之前将其返回。
小提琴: https ://jsfiddle.net/3Lbhfy5s/79/