从数字中删除不重要的尾随零?
我错过了一个标准的API调用,从数字中删除尾随无关紧要的零吗?
防爆。
var x = 1.234000 // to become 1.234; var y = 1.234001; // stays 1.234001
Number.toFixed()和Number.toPrecision()不是我所期待的。
如果将它转换为一个string,它将不会显示任何尾随的零,它们不是以variablesforms存储在variables中,而是作为一个数字创build的,而不是string。
var n = 1.245000 var noZeroes = n.toString() // "1.245"
我有一个类似的例子,我想在必要时使用.toFixed()
,但是当它不是的时候,我不想填充。 所以我结束了与toFixed一起使用parseFloat。
固定没有填充
parseFloat(n.toFixed(4));
另一个select,几乎相同的事情
这个答案可能有助于你的决定
Number(n.toFixed(4));
toFixed
将截断/填充数字到特定的长度,但也将其转换为string。 将其转换回数字types不仅会使数字更安全地使用,而且会自动删除任何尾随的0。 例如:
var n = "1.234000"; n = parseFloat(n); // n is 1.234 and in number form
因为即使你定义了一个尾随零的数字,它们也会被丢弃。
var n = 1.23000; // n == 1.23;
我首先使用了matti-lyra和gary的答案组合:
r=(+n).toFixed(4).replace(/\.0+$/,'')
结果:
- 1234870.98762341:“1234870.9876”
- 1230009100:“1230009100”
- 0.0012234:“0.0012”
- 0.1200234:“0.12”
- 0.000001231:“0”
- 0.10001:“0.1000”
- “asdf”:“NaN”(所以没有运行时错误)
有些问题的情况是0.10001。 我结束了使用这个更长的版本:
r = (+n).toFixed(4); if (r.match(/\./)) { r = r.replace(/\.?0+$/, ''); }
- 1234870.98762341:“1234870.9876”
- 1230009100:“1230009100”
- 0.0012234:“0.0012”
- 0.1200234:“0.12”
- 0.000001231:“0”
- 0.10001:“0.1”
- “asdf”:“NaN”(所以没有运行时错误)
更新 :这是加里的新版本(见评论):
r=(+n).toFixed(4).replace(/([0-9]+(\.[0-9]+[1-9])?)(\.?0+$)/,'$1')
这给出了与上述相同的结果。
toFixed
方法将根据需要进行相应的舍入。 它也会添加尾随零,这并不总是理想的。
(4.55555).toFixed(2); //-> "4.56" (4).toFixed(2); //-> "4.00"
如果您将返回值转换为数字,那些尾随的零将被删除。 这是比自己舍入或截断math更简单的方法。
+(4.55555).toFixed(2); //-> 4.56 +(4).toFixed(2); //-> 4
我有基本相同的要求,并发现没有这种function的内置机制。
除了修剪尾部零之外,我还需要对用户当前的语言环境(即123,456.789)进行四舍五入和可选的格式输出。
我在这方面的所有工作已经在GitHub上被列为prettyFloat.js(MIT Licensed): https : //github.com/dperish/prettyFloat.js
用法示例:
prettyFloat(1.111001, 3) // "1.111" prettyFloat(1.111001, 4) // "1.111" prettyFloat(1.1111001, 5) // "1.1111" prettyFloat(1234.5678, 2) // "1234.57" prettyFloat(1234.5678, 2, true) // "1,234.57" (en-us)
当Django在文本字段中显示Decimaltypes值时,我也需要解决这个问题。 例如,当“1”是价值。 它会显示“1.00000000”。 如果“1.23”是该值,则显示“1.23000000”(在“decimal_places”设置为8的情况下)
使用parseFloat不是我的select,因为它可能不会返回完全相同的值。 toFixed是不是一个选项,因为我不想任何东西,所以我创build了一个函数:
function removeTrailingZeros(value) { value = value.toString(); # if not containing a dot, we do not need to do anything if (value.indexOf('.') === -1) { return value; } # as long as the last character is a 0 or a dot, remove it while((value.slice(-1) === '0' || value.slice(-1) === '.') && value.indexOf('.') !== -1) { value = value.substr(0, value.length - 1); } return value; }
这是一个可能的解决scheme:
var x = 1.234000 // to become 1.234; var y = 1.234001; // stays 1.234001 eval(x) --> 1.234 eval(y) --> 1.234001
这些解决scheme都不适用于我非常小的数字。 http://numeraljs.com/解决这个给我。;
parseFloat(0.00000001.toFixed(8)); // 1e-8 numeral(0.00000001).format('0[.][00000000]'); // "0.00000001"