【发布时间】:2011-01-09 16:56:48
【问题描述】:
我有 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);
或
for(var i = 0; i < elements.length; ++i){
total += parseFloat(elements[i].value * 100) / 100).toFixed(2)
Math.floor 也没有运气
【问题讨论】:
-
您实际上并不需要发布所有代码,因为它与这里的问题并不真正相关。只发布相关位。
-
仅供参考:您的第二个(与 toFixed 有关)sn-p 有语法错误。
-
供将来参考,感谢@marcog,使用:
document.form0.total.value = total.toFixed(2); -
不值得理解为什么总和等于这么长的小数点吗?
-
供以后参考:因为 Javascript 是如何管理浮点值的,所以数字 1.35 无法准确地保存在变量中,甚至无法计算。在 Javascript 控制台
(1.35).toPrecision(52)中尝试此操作,它会显示 real 值或 Javascript 中的1.35是1.350000000000000088817841970012523233890533447265625(除此之外的所有小数均为 0)。
标签: javascript math parsefloat