将浮点转换为至少有一位小数的字符串(javascript)
让我给你举个例子将浮点转换为至少有一位小数的字符串(javascript),javascript,Javascript,让我给你举个例子 var a = 2.0; var stringA = "" + a; 我将得到:stringA=“2”,但我想要:stringA=“2.0” 但是,我不想失去精度,因此如果: var b = 2.412; var stringB = "" + b; 我想获得标准:stringB=“2.412” 这就是为什么toFixed()在这里不起作用的原因。除了像这样显式检查整数之外,还有其他方法吗 if (a % 1 === 0) return "" + a + ".0";
var a = 2.0;
var stringA = "" + a;
我将得到:stringA=“2”
,但我想要:stringA=“2.0”
但是,我不想失去精度,因此如果:
var b = 2.412;
var stringB = "" + b;
我想获得标准:stringB=“2.412”
这就是为什么toFixed()
在这里不起作用的原因。除了像这样显式检查整数之外,还有其他方法吗
if (a % 1 === 0)
return "" + a + ".0";
else
return "" + a;
如果a是你的花车怎么办
var a = 2.0;
var b = (a % 1 == 0) ? a + ".0" : a.toString();
已编辑:添加引用和更改以允许。0
如果您想将
.0
附加到数字到字符串转换的输出中,并保持非整数的精度,只需测试整数并对其进行特殊处理即可
function toNumberString(num) {
if (Number.isInteger(num)) {
return num + ".0"
} else {
return num.toString();
}
}
Input Output
3 "3.0"
3.4567 "3.4567"
这是一个内置的功能
var a = 2;
var b = a.toFixed(1);
这将数字四舍五入到小数点后一位,并以小数点后一位显示,即使它是零。对于其他看这个问题的人,我刚刚想到,要将浮点转换为至少有
n
小数点的字符串,可以写:
function toAtLeastNDecimalPlaces(num, n) {
normal_conv = num.toString();
fixed_conv = num.toFixed(n);
return (fixed_conv.length > normal_conv.length ? fixed_conv : normal_conv);
}
请注意,根据,toFixed()
最多可用于20位小数。因此,上述功能将不适用于n>20
此外,上述函数对科学记数法没有任何特殊处理(但本线程中的任何其他答案也没有处理)。此解决方案试图平衡简洁性和可读性
const floatString = (n) => Number.isInteger(n) ? n.toFixed(1) : n.toString();
这不能解决问题。如果a=2.0,我的字符串将是“2”,而不是“2.0”。事实上,我提出了同样的问题(使用模来检查整数)是的,我回到了你的答案,并相应地做了。这肯定比我建议的要干净得多:)谢谢你,我实际上不知道是
isInteger()
还是模是“更干净的”,但这两种方法都适用于浮点值,您必须将整数视为一种特殊情况,对于那些喜欢一行的人来说:const toNumberString=n=>`${n}${Number.isInteger(n)?“.0”:“}”
downvote,因为要求明确指出,当存在小数点时,精度不会丢失。toFixed(1)将其强制到小数点后一位。不过仍然非常有用,所以我不会投反对票