JavaScript数学,四舍五入到小数点后两位[重复]
我有以下JavaScript语法:
var discount = Math.round(100 - (price / listprice) * 100);
这四舍五入为整数。如何返回两位小数的结果?
我有以下JavaScript语法:
var discount = Math.round(100 - (price / listprice) * 100);
这四舍五入为整数。如何返回两位小数的结果?
关闭,朕知道了
阅读 1120
阅读 1480
阅读 1033
阅读 726
阅读 1560
这是一个工作示例
接受的答案略有不同。
toFixed(2)
返回一个字符串,并且您将始终获得两个小数位。这些可能为零。如果您想取消最后的零,只需执行以下操作:编辑:我刚刚发现了Firefox 35.0.1中的一个bug,这意味着以上内容可能为NaN提供了一些值。
我已将代码更改为
这给出了一个最多有两个小数位的数字。如果要三个,则将乘以1000,以此类推。
OP始终希望保留两位小数,但是如果toFixed()在Firefox中损坏,则需要先修复。
参见https://bugzilla.mozilla.org/show_bug.cgi?id=1134388
我认为我看过的最好方法是将10乘以数字的幂,然后进行Math.round,最后将10除以数字的幂。这是我在 TypeScript中使用的简单函数:
还是普通的javascript:
最快的方法 -比toFixed()更快:
两个小数
三小数
尝试使用
discount.toFixed(2);
如果您使用一元加号将字符串转换为MDN中记录的数字。
例如:
+discount.toFixed(2)
要获得两个小数点的结果,可以这样:
将四舍五入的值乘以100以保留前两位,然后将其除以100得到实际结果。
注-如果3位数精度很重要,请参阅编辑4
toFixed将根据超过2个小数的值为您舍入或舍入。
示例:http://jsfiddle.net/calder12/tv9HY/
文档:https : //developer.mozilla.org/zh-CN/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-似乎在实际收益表上固定了TOST仍在搞砸一些数字,此最终编辑似乎有效。哎呀,这么多返工!
请参阅此处的小提琴示例:https : //jsfiddle.net/calder12/3Lbhfy5s/
编辑4-你们杀了我。Edit 3对负数失败,而没有深入研究为什么在进行舍入之前将负数变为正数更容易处理,然后在返回结果之前将其变回正好。
小提琴:https : //jsfiddle.net/3Lbhfy5s/79/
你的回答