当 .toFixed(2) 在小数点后给出零时,如何将浮点数格式化为整数?

Rob*_*ert 1 javascript numbers number-formatting

我想知道实现以下目标的最短和最安全的方法是什么:

假设我有一个值为1.200123. 在我们的可视化中,我想用两位小数显示这个值,所以我现在使用myFloat.toFixed(2);,这给了我1.20.

没关系。但是如果结果输出的小数位只有零呢?例如1.000043变成的值1.00

对于上述情况:如何省略小数点和零并仅1作为输出获得,最好不解析和操作来自 的字符串.toFixed(2)

T.J*_*der 5

...最好不解析和操作来自 .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)