试图在javascript中舍入对象值

时间:2012-09-05 00:57:50

标签: javascript object rounding

我看似简单的小脚本......

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,但我可以使用一些。

提前谢谢。

2 个答案:

答案 0 :(得分: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还有一些其他有趣的摘要。

在回答How to write a prototype for Number.toFixed in JavaScript?时,似乎有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

答案 1 :(得分:0)

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

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

要绕到100s位置,先划分,然后再乘以。您也可以将100更改为任何其他位置,它将适用于此。 (10和10的位置改为100到10)