我是否错过了一个标准的API调用,可以将数字末尾无关的零去掉?
var x = 1.234000; // to become 1.234
var y = 1.234001; // stays 1.234001
Number.toFixed()
和Number.toPrecision()
并不完全符合我的需求。
我是否错过了一个标准的API调用,可以将数字末尾无关的零去掉?
var x = 1.234000; // to become 1.234
var y = 1.234001; // stays 1.234001
Number.toFixed()
和Number.toPrecision()
并不完全符合我的需求。
export const floatToStr = (f, ndigit = 2) => {
const str = f.toFixed(ndigit)
return ndigit
? str
.replace(/0*$/g, '')
.replace(/\.$/, '')
: str
}
阅读了所有的答案和评论后,我最终得出了这个结论:
function isFloat(n) {
let number = (Number(n) === n && n % 1 !== 0) ? eval(parseFloat(n)) : n;
return number;
}
我知道使用eval
可能会有些危险,但这对我很有帮助。
所以:
isFloat(1.234000); // = 1.234;
isFloat(1.234001); // = 1.234001
isFloat(1.2340010000); // = 1.234001
如果你想限制小数位数,可以使用toFixed()
,正如其他人所指出的那样。
let number = (Number(n) === n && n % 1 !== 0) ? eval(parseFloat(n).toFixed(3)) : n;
就是这样。
function removeTrailingZeros(num: number) : number {
let value = num.toString();
const indexOfDot = value.indexOf('.');
if (indexOfDot === -1) {
return num;
}
let i = value.length - 1;
while ((value[i] === "0" || value[i] === ".") && i > indexOfDot - 1) {
value = value.substring(0, i);
i--;
}
return +value;
}
var x = 1.234000 // to become 1.234;
var y = 1.234001; // stays 1.234001
eval(x) --> 1.234
eval(y) --> 1.234001
parseFloat()
更加适合。 - hutchbat
1.234000 === 1.234
的意思是“1.234000等于1.234”。 - GumboparseFloat(n)
? - Mr. Alien