格式编号始终显示2位小数

我想格式化我的数字始终显示2位小数,四舍五入适用。

例子:

number display ------ ------- 1 1.00 1.341 1.34 1.345 1.35 

我一直在使用这个:

 parseFloat(num).toFixed(2); 

但它显示11 ,而不是1.00

这在FF4中正常工作:

现场演示

 parseFloat(Math.round(num3 * 100) / 100).toFixed(2); 

请注意,它将四舍五入到小数点后1.346 ,所以input1.346将返回1.35

 Number(1).toFixed(2); // 1.00 Number(1.341).toFixed(2); // 1.34 Number(1.345).toFixed(2); // 1.34 NOTE: See andy's comment below. Number(1.3450001).toFixed(2); // 1.35 

如果value = 1.005 这个答案将失败。

作为一个更好的解决办法,舍入问题可以通过使用以指数表示法表示的数字来避免:

 Number(Math.round(1.005+'e2')+'e-2').toFixed(2); // 1.01 

学分: JavaScript中四舍五入的小数

 var num = new Number(14.12); console.log(num.toPrecision(2));//outputs 14 console.log(num.toPrecision(3));//outputs 14.1 console.log(num.toPrecision(4));//outputs 14.12 console.log(num.toPrecision(5));//outputs 14.120 

最简单的答案:

 var num = 1.2353453; num.toFixed(2); // 1.24 

例如: http : //jsfiddle.net/E2XU7/

如果你已经使用jQuery,你可以看看使用jQuery数字格式插件。

该插件可以将格式化数字作为string返回,您可以设置小数点和千位分隔符,并且可以select要显示的小数位数。

 $.number( 123, 2 ); // Returns '123.00' 

您也可以从GitHub获取jQuery数字格式 。

 var number = 123456.789; console.log(new Intl.NumberFormat('en-IN', { maximumFractionDigits: 2 }).format(number)); 

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat

你是这个意思吗?

 function showAsFloat(num, n){ return !isNaN(+num) ? (+num).toFixed(n || 2) : num; } document.querySelector('#result').textContent = [ 'command | result', '-----------------------------------------------', 'showAsFloat(1); | ' + showAsFloat(1), 'showAsFloat(1.314); | ' + showAsFloat(1.314), 'showAsFloat(\'notanumber\') | ' + showAsFloat('notanumber'), 'showAsFloat(\'23.44567\', 3) | ' + showAsFloat('23.44567', 3), 'showAsFloat(2456198, 5) | ' + showAsFloat('2456198', 5), 'showAsFloat(0); | ' + showAsFloat(0) ].join('\n'); 
 <pre id="result"></pre> 

为了最精确的舍入,创build这个函数:

 function round(value, decimals) { return Number(Math.round(value +'e'+ decimals) +'e-'+ decimals).toFixed(decimals); } 

并用它来四舍五入到小数点后两位:

 console.log("seeked to " + round(1.005, 2)); > 1.01 

感谢Razu ,本文以及MDN的Math.round参考 。

将数字转换为string,只保留两位小数:

 var num = 5.56789; var n = num.toFixed(2); 

n的结果是:

 5.57 

这也是一个通用的函数,可以格式化为任意数量的小数位:

 function numberFormat(val, decimalPlaces) { var multiplier = Math.pow(10, decimalPlaces); return (Math.round(val * multiplier) / multiplier).toFixed(decimalPlaces); } 

在需要特定格式的地方,你应该编写你自己的例程或者使用库函数来执行你所需要的。 基本的ECMAScriptfunction通常不足以显示格式化的数字。

四舍五入和格式的详细解释在这里: http : //www.merlyn.demon.co.uk/js-round.htm#RiJ

一般来说,四舍五入和格式化只能作为输出之前的最后一步。 这样做可能会引入意外的大错误并破坏格式。

四舍五入到N个地方的更通用的解决scheme

 function roundN(num,n){ return parseFloat(Math.round(num * Math.pow(10, n)) /Math.pow(10,n)).toFixed(n); } console.log(roundN(1,2)) console.log(roundN(1.34,2)) console.log(roundN(1.35,2)) console.log(roundN(1.344,2)) console.log(roundN(1.345,2)) console.log(roundN(1.344,3)) console.log(roundN(1.345,3)) console.log(roundN(1.3444,3)) console.log(roundN(1.3455,3)) Output 1.00 1.34 1.35 1.34 1.35 1.344 1.345 1.344 1.346 

你在找地板吗?

 var num = 1.42482; var num2 = 1; var fnum = Math.floor(num).toFixed(2); var fnum2 = Math.floor(num2).toFixed(2); alert(fnum + " and " + fnum2); //both values will be 1.00 
 function currencyFormat (num) { return "$" + num.toFixed(2).replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,") } console.info(currencyFormat(2665)); // $2,665.00 console.info(currencyFormat(102665)); // $102,665.00 

你没有给我们全部的图片。

javascript:alert(parseFloat(1).toFixed(2))在我的浏览器中显示1.00时,我把它粘贴到地址栏中。 但是如果你之后做了一些事情,它将会恢复。

 var num = 2 document.getElementById('spanId').innerHTML=(parseFloat(num).toFixed(2)-1) shows 1 and not 1.00 
 var quantity = 12; var import1 = 12.55; var total = quantity * import1; var answer = parseFloat(total).toFixed(2); document.write(answer); 

我喜欢:

 var num = 12.749; parseFloat((Math.round(num * 100) / 100).toFixed(2)); // 123.75 

用小数点后parseFloat() ,然后确保使用parseFloat()来parsing它,以返回Number,而不是String,除非您不关心它是否是String或Number。

精确的方法扩展math对象

 Object.defineProperty(Math, 'precision',{ value: function (value,precision,type){ var v = parseFloat(value), p = Math.max(precision,0)||0, t = type||'round'; return (Math[t](v*Math.pow(10,p))/Math.pow(10,p)).toFixed(p); } }); console.log( Math.precision(3.1,3), // round 3 digits Math.precision(0.12345,2,'ceil'), // ceil 2 digits Math.precision(1.1) // integer part ) 
 function number_format(string,decimals=2,decimal=',',thousands='.',pre='R$ ',pos=' Reais'){ var numbers = string.toString().match(/\d+/g).join([]); numbers = numbers.padStart(decimals+1, "0"); var splitNumbers = numbers.split("").reverse(); var mask = ''; splitNumbers.forEach(function(d,i){ if (i == decimals) { mask = decimal + mask; } if (i>(decimals+1) && ((i-2)%(decimals+1))==0) { mask = thousands + mask; } mask = d + mask; }); return pre + mask + pos; } var element = document.getElementById("format"); var money= number_format("10987654321",2,',','.'); element.innerHTML = money; 
 #format{ display:inline-block; padding:10px; border:1px solid #ddd; background:#f5f5f5; } 
 <div id='format'>Test 123456789</div> 
 (num + "").replace(/^([0-9]*)(\.[0-9]{1,2})?.*$/,"$1$2") 

这是我如何解决我的问题:

parseFloat(parseFloat(floatString).toFixed(2));