我想知道实现以下目标的最短,最安全的方法是什么:
假设我有一个带值的float var 1.200123
。在我们的可视化中,我想用两个小数位显示该值,因此我现在使用myFloat.toFixed(2);
,这给了我1.20
。
没关系。但是,如果结果输出的小数位只有零,该怎么办?例如1.000043
,变为的值1.00
。
对于上述情况:如何省略小数点和零点而仅1
作为输出获取,最好不解析和处理从其中出来的字符串.toFixed(2)
?
...最好不解析和处理.toFixed(2)产生的字符串?
好吧,尽管我担心要在数字逻辑和逻辑之间实现完美匹配,但考虑到包括以下短语的定义,您可以通过数字方式实现:toFixed
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);
但这是一种近似的数值方法,至少与上述测试用例的结果匹配:
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);
.as-console-wrapper {
max-height: 100% !important;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句