我有一个 javascript 函数,可以自动将输入字段添加在一起,但是添加像 1.35 + 1.35 + 1.35 这样的数字会得到 4.050000000000001 的输出,仅作为示例。如何将总数四舍五入到小数点后第二位而不是那个长字符串?
输入字段将不仅仅包含 1.35 示例,因此我需要总计小数点后的位数不超过 2 个点。这是完整的工作代码:
<html>
<head>
<script type="text/javascript">
function Calc(className){
var elements = document.getElementsByClassName(className);
var total = 0;
for(var i = 0; i < elements.length; ++i){
total += parseFloat(elements[i].value);
}
document.form0.total.value = total;
}
function addone(field) {
field.value = Number(field.value) + 1;
Calc('add');
}
</script>
</head>
<body>
<form name="form0" id="form0">
1: <input type="text" name="box1" id="box1" class="add" value="0" onKeyUp="Calc('add')" onChange="updatesum()" onClick="this.focus();this.select();" />
<input type="button" value=" + " onclick="addone(box1);">
<br />
2: <input type="text" name="box2" id="box2" class="add" value="0" onKeyUp="Calc('add')" onClick="this.focus();this.select();" />
<input type="button" value=" + " onclick="addone(box2);">
<br />
<br />
Total: <input readonly style="border:0px; font-size:14; color:red;" id="total" name="total">
<br />
</form>
</body></html>
我尝试过的一些事情应该有效,但我显然错误地实施了它们:
for(var i = 0; i < elements.length; ++i){
total += parseFloat(elements[i].value.toString().match(/^\d+(?:\.\d{0,2})?/));
var str = total.toFixed(2);
or
for(var i = 0; i < elements.length; ++i){
total += parseFloat(elements[i].value * 100) / 100).toFixed(2)
也没有运气Math.floor
Use toFixed()
舍入num
使用传统的四舍五入方法保留至小数点后两位。它将 4.050000000000001 舍入为 4.05。
num.toFixed(2);
您可能更喜欢使用toPrecision()
,这将去除所有产生的尾随零。
Example http://ideone.com/i8cjG:
1.35+1.35+1.35 => 4.050000000000001
(1.35+1.35+1.35).toFixed(2) => 4.05
(1.35+1.35+1.35).toPrecision(3) => 4.05
// or...
(1.35+1.35+1.35).toFixed(4) => 4.0500
(1.35+1.35+1.35).toPrecision(4) => 4.05
参考:JavaScript 数字格式 - 小数精度 http://www.mredkj.com/javascript/nfbasic2.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)