格式编号始终显示2位小数
我想格式化我的数字始终显示2位小数,四舍五入适用。
例子:
number display ------ ------- 1 1.00 1.341 1.34 1.345 1.35
我一直在使用这个:
parseFloat(num).toFixed(2);
但它显示1
为1
,而不是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));