我看似简单的小脚本......
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,但我可以使用一些。
提前谢谢。
答案 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)