我有自动添加输入字段的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
答案 0 :(得分:60)
使用toFixed()
使用传统的舍入方法将num
舍入为2位小数。它将在4.050000000000001到4.05之间。
num.toFixed(2);
您可能更喜欢使用toPrecision()
,这会删除任何结果的尾随零。
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
答案 1 :(得分:3)
var num = 4.050000000000001;
num = num.toFixed(2);
toFixed
将根据您要查找的小数点后的位数进行舍入。
答案 2 :(得分:2)
您可以在代码中使用Math.round(total*100000000000)/100000000000;
。它适用于大多数情况
答案 3 :(得分:1)
这有效:
$(document).ready(
function() {
$('#field1').blur(function(){ $('#field2').val(parseFloat($(this).val() * 2.2).toFixed(1)); });
$('#field2').blur(function(){ $('#field1').val(parseFloat($(this).val() / 2.2).toFixed(1)); });
}
);
这失败了:
$(document).ready(
function() {
$('#field1').blur(function(){ $('#field2').val(parseFloat($(this).val() * 2.2)).toFixed(1); });
$('#field2').blur(function(){ $('#field1').val(parseFloat($(this).val() / 2.2)).toFixed(1); });
}
);
所以要小心放置括号()的方式......在第一种情况下,舍入将起作用,但在第二种情况下不会起作用......
答案 4 :(得分:0)
您可能希望使用port of Java's BigDecimal来获得实际精确的十进制数学,而不是舍入。