Rob*_*ert 1 javascript numbers number-formatting
我想知道实现以下目标的最短和最安全的方法是什么:
假设我有一个值为1.200123. 在我们的可视化中,我想用两位小数显示这个值,所以我现在使用myFloat.toFixed(2);,这给了我1.20.
没关系。但是如果结果输出的小数位只有零呢?例如1.000043变成的值1.00。
对于上述情况:如何省略小数点和零并仅1作为输出获得,最好不解析和操作来自 的字符串.toFixed(2)?
...最好不解析和操作来自 .toFixed(2) 的字符串?
好吧,你可以用数字来做,尽管我担心在 numeric logic 和toFixed's logic之间获得完美匹配,因为toFixed包含短语的定义如下:
设n是一个整数,n ÷ 10 f - x的精确数学值尽可能接近于零。如果有两个这样的n,则选择较大的n。
所以我可能只是更新字符串,这不是很多工作:
function formatNumber(num) {
return num.toFixed(2).replace(/\.00$/, "");
}
function test(num) {
console.log(num, "=>", formatNumber(num));
}
test(1.01);
test(1.43);
test(23.7);
test(1.200123);
test(1.000043);
test(1.007);
test(1.0007);Run Code Online (Sandbox Code Playgroud)
但这是一种近似数值方法,它至少与上述测试用例的结果相匹配:
function formatNumber(num) {
var check = Math.round(num * 100) / 100;
var rounded = Math.round(check);
if (rounded == check) {
return String(rounded);
}
return num.toFixed(2);
}
function formatNumberViaToFixed(num) {
return num.toFixed(2).replace(/\.00$/, "");
}
function test(num) {
var formatted = formatNumber(num);
var viaToFixed = formatNumberViaToFixed(num);
if (formatted == viaToFixed) {
console.log(num, "=>", formatted);
} else {
console.log(num, "=>", formatted, "ERROR: Should be", viaToFixed);
}
}
test(1.01);
test(1.43);
test(23.7);
test(1.200123);
test(1.000043);
test(1.007);
test(1.0007);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper {
max-height: 100% !important;
}Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1159 次 |
| 最近记录: |