parseFloat四舍五入

JB.*_*JB. 41 javascript math parsefloat

我有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>
Run Code Online (Sandbox Code Playgroud)

我尝试过的一些东西应该可行,但我显然是错误地实现它们:

for(var i = 0; i < elements.length; ++i){
total += parseFloat(elements[i].value.toString().match(/^\d+(?:\.\d{0,2})?/));

var str = total.toFixed(2);
Run Code Online (Sandbox Code Playgroud)

要么

for(var i = 0; i < elements.length; ++i){
total += parseFloat(elements[i].value * 100) / 100).toFixed(2)
Run Code Online (Sandbox Code Playgroud)

也没有运气 Math.floor

mar*_*cog 63

使用toFixed()四舍五入num到使用传统的四舍五入方法2个十进制数字.它将四舍五入到4.050000000000001到4.05.

num.toFixed(2);
Run Code Online (Sandbox Code Playgroud)

您可能更喜欢使用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
Run Code Online (Sandbox Code Playgroud)

参考:JavaScript数字格式 - 十进制精度

  • 为什么我得到 (1.35+1.35+1.35).toPrecision(4) =&gt; '4.050' (2认同)