3

我知道 javascript 可能有除法的舍入问题,但没有乘法。你如何解决这些问题?

var p = $('input[name="productsUS"]').val().replace(",", ".");
var t = $('input[name="productsWorld"]').val().replace(",", ".");

if (p >= 0 && t >= 1) {
    var r = p / t;
    r = Math.round(r * 10000) / 10000;
    var aff = (r * 100) + "%";

如果p = 100t = 57674

r = 0.0017(ok) 和aff = 0.16999999999999998%(arg)

我怎么能得到aff = 0.17

4

4 回答 4

2

("0.16999999999999998").tofixed(2)给你0.17

于 2012-04-25T14:27:14.043 回答
1

如果您想aff保留数字而不是转换为字符串,则可以使用toFixed来解决精度问题,然后使用一元运算符将其“转换”回数字,+如下所示:

var n = 0.16999999999999998;

n = +n.toFixed(10); // 0.17

您可能希望使用比小数点后 2 位更高的精度来避免舍入问题,我在这里使用了 10。

于 2012-04-25T14:36:54.633 回答
1
var aff = (r * 100).toFixed(2) + "%";

现场演示

toFixedMDN上

于 2012-04-25T14:28:35.517 回答
0

这是 JavaScript 中的一个错误(尽管它也影响了一些其他语言,例如 Python),因为它存储非整数的方式有点错误(二进制!)。解决它的唯一方法是将其四舍五入到小数点后两位。

于 2012-04-25T14:31:41.707 回答