0

我似乎有一个非常简单的小脚本......

function speedcomp(obj) {
    obj.speedmile.value = 3600 / obj.timesec.value
}

function distcomp(obj) {
    if (obj.speed.value == "")
        obj.speed.value = ((1 * obj.distance.value) / obj.day.value) / 24;
    else if (obj.distance.value == "")
        obj.distance.value = distance.value;
    else if (obj.day.value == "")
        obj.day.value = ((1 * obj.distance.value) / obj.speed.value) / 24;
    obj.hour.value = ((1 * obj.distance.value) / obj.speed.value);
}​

我有 4 个输入类型的文本,它们的 id 分别是距离、速度、日期和小时。当我输入速度和距离并单击 onclick="distcomp(this.form)" 的按钮时,它很好地为我计算。

我遇到的问题是试图将天和小时的值四舍五入到最接近的第 100 位。因为我没有预设值,所以我发现自己在 Math.round 和 Math.floor 中挣扎。我相信答案将是使用 Math.round 但我可以使用一些。

先感谢您。

4

2 回答 2

2

你可以使用toFixed

var num = Math.random();
alert(num.toFixed(2));

IE 6 周围有一些错误的实现,并且 javascript 小数对于某些值并不精确,因此您可能会得到意想不到的结果:

(0.595).toFixed(2) // 0.59 in Firefox, 0.60 in IE

如果您使用:

Math.round(num*100)/100

那么您将无法获得正确的填充(0.59 => 0.6 而不是 0.60)。MDN还有一些其他有趣的片段。

似乎有一个合理的替代方法来toFixed回答如何在 JavaScript 中为 Number.toFixed 编写原型?.

编辑

这是一个合理的 toFixed 函数,我将继续测试以确保它合理地兼容 ES5。因为toFixed(0,2)它返回0.00,而规范说0,但我认为前者更有用。

function toFixed(num, places) {

    var m, s = '', t;
    num = Number(num);

    if (isNaN(num)) return 'NaN';

    if (num < 0) {
      s = '-';
      num = num * -1;
    }

    m = Math.pow(10, places || 0);
    num = String(Math.round(num * m) / m).split('.');
    t = num[1] || '';
    num[1] = t + (new Array(places - t.length + 1)).join('0');

    return s + num.join('.');
};

Jasper 的评论似乎是一个很好的解决方案:

(Math.round(.595*100)/100).toFixed(2);

虽然(0).toFixed(2)给出0(根据 EMCA-262)而不是更有用0.00,这就是为什么上面避免toFixed.

于 2012-09-05T01:24:15.237 回答
0

要四舍五入到最接近的第 100 位,请将数字乘以 100,调用Math.round()然后再除以 100。

num=210.653434343
Math.round(num*100)/100
210.65

要四舍五入到 100 位,首先除法,四舍五入,然后乘法。您也可以将 100 更改为任何其他位置,它会为此工作。(第 10 和第 10 名将 100 更改为 10)

于 2012-09-05T01:03:21.060 回答