Var*_*ada 715 javascript floating-point number-formatting
我想格式化我的数字,以便始终显示2位小数,在适用的地方进行舍入.
例子:
number display
------ -------
1 1.00
1.341 1.34
1.345 1.35
Run Code Online (Sandbox Code Playgroud)
我一直在用这个:
parseFloat(num).toFixed(2);
Run Code Online (Sandbox Code Playgroud)
但它显示1
为1
,而不是1.00
.
dru*_*dge 1022
这在FF4中工作正常:
parseFloat(Math.round(num3 * 100) / 100).toFixed(2);
Run Code Online (Sandbox Code Playgroud)
现场演示
var num1 = "1";
document.getElementById('num1').innerHTML = parseFloat(Math.round(num1 * 100) / 100).toFixed(2);
var num2 = "1.341";
document.getElementById('num2').innerHTML = parseFloat(Math.round(num2 * 100) / 100).toFixed(2);
var num3 = "1.345";
document.getElementById('num3').innerHTML = parseFloat(Math.round(num3 * 100) / 100).toFixed(2);
Run Code Online (Sandbox Code Playgroud)
span {
border: 1px solid #000;
margin: 5px;
padding: 5px;
}
Run Code Online (Sandbox Code Playgroud)
<span id="num1"></span>
<span id="num2"></span>
<span id="num3"></span>
Run Code Online (Sandbox Code Playgroud)
请注意,它将舍入到2位小数,因此输入1.346
将返回1.35
.
Abe*_*ROS 296
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
Run Code Online (Sandbox Code Playgroud)
document.getElementById('line1').innerHTML = Number(1).toFixed(2);
document.getElementById('line2').innerHTML = Number(1.341).toFixed(2);
document.getElementById('line3').innerHTML = Number(1.345).toFixed(2);
document.getElementById('line4').innerHTML = Number(1.3450001).toFixed(2);
Run Code Online (Sandbox Code Playgroud)
<span id="line1"></span>
<br/>
<span id="line2"></span>
<br/>
<span id="line3"></span>
<br/>
<span id="line4"></span>
Run Code Online (Sandbox Code Playgroud)
raz*_*azu 86
如果这个答案会失败value = 1.005
.
作为更好的解决方案,可以使用以指数表示法表示的数字来避免舍入问题:
Number(Math.round(1.005+'e2')+'e-2'); // 1.01
Run Code Online (Sandbox Code Playgroud)
hol*_*s83 58
对于现代浏览器,请使用toLocaleString
:
var num = 1.345;
num.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 });
Run Code Online (Sandbox Code Playgroud)
指定语言环境标记作为第一个参数来控制小数点分隔符。对于点,例如使用英语美国语言环境:
num.toLocaleString("en-US", { maximumFractionDigits: 2, minimumFractionDigits: 2 });
Run Code Online (Sandbox Code Playgroud)
这使:
1.35
欧洲的大多数国家/地区使用逗号作为小数点分隔符,因此,例如,如果您使用瑞典/瑞典语言环境:
num.toLocaleString("sv-SE", { maximumFractionDigits: 2, minimumFractionDigits: 2 });
Run Code Online (Sandbox Code Playgroud)
它会给:
1,35
Imb*_*bro 42
我建议你使用
new Intl.NumberFormat('de-DE', { minimumFractionDigits: 2, maximumFractionDigits: 2 }).format(num)
Run Code Online (Sandbox Code Playgroud)
这样您还将获得指定国家/地区的本地格式,并且可以保证显示精确的 2 位小数(无论 num 为 1 或 1.12345 时,它都会分别显示 1.00 和 1.12)
在这个例子中,我使用了德语本地化,因为我希望我的数字显示有千位分隔符,所以这将是一些输出:
1 => 1,00
1.12 => 1,12
1.1234 => 1,12
1234 => 1.234,00
1234.1234 => 1.234,12
Run Code Online (Sandbox Code Playgroud)
小智 19
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
Run Code Online (Sandbox Code Playgroud)
mpl*_*jan 15
您没有向我们提供全部情况。
javascript:alert(parseFloat(1).toFixed(2))
当我将其粘贴到地址栏中时,我的浏览器中显示 1.00。但是,如果您事后对其进行某些操作,它就会恢复。
alert(parseFloat(1).toFixed(2))
var num = 2
document.getElementById('spanId').innerHTML = (parseFloat(num).toFixed(2) - 1)
Run Code Online (Sandbox Code Playgroud)
<span id="spanId"></span>
Run Code Online (Sandbox Code Playgroud)
shows 1 and not 1.00
Run Code Online (Sandbox Code Playgroud)
Pir*_*App 13
圆形到N个位置的更通用的解决方案
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
Run Code Online (Sandbox Code Playgroud)
小智 13
好消息!!!!!看来新版本的 javascript ES2020(我刚刚使用)提供了此函数的新行为。
let ff:number =3
console.info(ff.toFixed(2)) //3.00
Run Code Online (Sandbox Code Playgroud)
如预期的。
mac*_*Jun 12
最简单的答案:
var num = 1.2353453;
num.toFixed(2); // 1.24
Run Code Online (Sandbox Code Playgroud)
Nat*_*ate 12
要获得最准确的舍入,请创建此函数:
function round(value, decimals) {
return Number(Math.round(value +'e'+ decimals) +'e-'+ decimals).toFixed(decimals);
}
Run Code Online (Sandbox Code Playgroud)
并用它来舍入到2位小数:
console.log("seeked to " + round(1.005, 2));
> 1.01
Run Code Online (Sandbox Code Playgroud)
由于Razu,该文章,并MDN的Math.round参考.
如果您已经在使用jQuery,那么您可以查看使用jQuery Number Format插件.
该插件可以将格式化的数字作为字符串返回,您可以设置十进制和千位分隔符,您可以选择要显示的小数位数.
$.number( 123, 2 ); // Returns '123.00'
Run Code Online (Sandbox Code Playgroud)
您还可以从GitHub获取jQuery数字格式.
var number = 123456.789;
console.log(new Intl.NumberFormat('en-IN', { maximumFractionDigits: 2 }).format(number));
Run Code Online (Sandbox Code Playgroud)
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');
Run Code Online (Sandbox Code Playgroud)
<pre id="result"></pre>
Run Code Online (Sandbox Code Playgroud)
将数字转换为字符串,仅保留两个小数:
var num = 5.56789;
var n = num.toFixed(2);
Run Code Online (Sandbox Code Playgroud)
n的结果将是:
5.57
Run Code Online (Sandbox Code Playgroud)
小智 6
刚遇到这个最长的线程,下面是我的解决方案:
parseFloat(Math.round((parseFloat(num * 100)).toFixed(2)) / 100 ).toFixed(2)
Run Code Online (Sandbox Code Playgroud)
让我知道是否有人可以戳一个洞
小智 5
你在找地板吗?
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
964071 次 |
最近记录: |