我想格式化我的数字,总是显示2小数点后,四舍五入适用的地方。
例子:
number display
------ -------
1 1.00
1.341 1.34
1.345 1.35
我一直在用这个:
parseFloat(num).toFixed(2);
但是它把1显示为1,而不是1.00。
我想格式化我的数字,总是显示2小数点后,四舍五入适用的地方。
例子:
number display
------ -------
1 1.00
1.341 1.34
1.345 1.35
我一直在用这个:
parseFloat(num).toFixed(2);
但是它把1显示为1,而不是1.00。
当前回答
在进行toFixed()调用之前,我必须在parseFloat()和Number()转换之间做出决定。下面是一个捕获用户输入后进行数字格式化的示例。
HTML:
<input type="number" class="dec-number" min="0" step="0.01" />
事件处理程序:
$('.dec-number').on('change', function () {
const value = $(this).val();
$(this).val(value.toFixed(2));
});
上述代码将导致TypeError异常。注意,虽然html输入类型是“数字”,但用户输入实际上是“字符串”数据类型。但是,toFixed()函数只能在Number类型的对象上调用。
最终代码如下所示:
$('.dec-number').on('change', function () {
const value = Number($(this).val());
$(this).val(value.toFixed(2));
});
我倾向于使用Number() vs. parseFloat()强制转换的原因是,我不需要对空输入字符串或NaN值执行额外的验证。Number()函数将自动处理空字符串并将其转换为零。
其他回答
你在找地板吗?
变量数 = 1.42482; var num2 = 1; var fnum = Math.floor(num).toFixed(2); var fnum2 = Math.floor(num2).toFixed(2); console.log(fnum + “ 和 ” + fnum2);两个值均为 1.00
你可以试试下面的代码:
function FormatNumber(number, numberOfDigits = 2) {
try {
return new Intl.NumberFormat('en-US').format(parseFloat(number).toFixed(numberOfDigits));
} catch (error) {
return 0;
}
}
var test1 = FormatNumber('1000000.4444');
alert(test1); // 1,000,000.44
var test2 = FormatNumber(100000000000.55555555, 4);
alert(test2); // 100,000,000,000.5556
在需要特定格式的地方,您应该编写自己的例程或使用库函数来完成所需的工作。基本的ECMAScript功能通常不足以显示格式化的数字。
关于舍入和格式的详细解释在这里:http://www.merlyn.demon.co.uk/js-round.htm#RiJ
作为一般规则,舍入和格式化应仅作为输出前的最后一步执行。过早地这样做可能会引入意想不到的大错误并破坏格式。
(num + "").replace(/^([0-9]*)(\.[0-9]{1,2})?.*$/,"$1$2")
简单的回答是:
var num = 1.2353453;
num.toFixed(2); // 1.24
例如:http://jsfiddle.net/E2XU7/