JavaScript中是否有內置的功能,允許您在不擴展的情況下獲得某個數字的最小增量?例如:查找數字的最小增量
var i = 0.0003412
smallest increment = 0.0000001
var j = 0.011
smallest increment = 0.001
可以計算長度並在最後拋出1,當然。但是有更好的方法嗎?
JavaScript中是否有內置的功能,允許您在不擴展的情況下獲得某個數字的最小增量?例如:查找數字的最小增量
var i = 0.0003412
smallest increment = 0.0000001
var j = 0.011
smallest increment = 0.001
可以計算長度並在最後拋出1,當然。但是有更好的方法嗎?
如果這是你的問題,沒有內置函數。你將不得不自己想出一個解決方案。例如:
Math.pow(0.1, String(num).split('.')[1].length)
解析值的另一種方法。
function smallestIncrement(nr) {
if (nr < 0) nr = -nr;
let str = nr.toExponential(),
e = str.indexOf("e");
return Number("1e" + (str.substr(e + 1) - Math.max(0, e - 2)));
}
//just for completeness
function biggestIncrement(nr) {
if (nr < 0) nr = -nr;
let str = nr.toExponential();
return Number("1" + str.substr(str.indexOf("e")))
}
//floating point math has issues. like:
//0.1 + 0.2 === 0.30000000000000004
function fixFloat(v){
return Math.round(v/1e-14)*1e-14;
}
[
0.0003412,
-3000,
12.340,
0.000000
].forEach(nr => {
console.log(
nr,
fixFloat(nr+smallestIncrement(nr)),
fixFloat(nr+biggestIncrement(nr))
);
})
.as-console-wrapper {
top: 0;
max-height: 100%!important
}
你說,對於沒有小數位值,你想步爲1
我沒有補充說進入功能,因爲我沒有看到,如何/爲什麼在1.234e-10
和1.234e+10
之間的邏輯應該有所不同。
您可以通過執行簡單的Math.min(1, smallestIncrement(nr))
或將代碼更改爲return Number("1e" + Math.min(0, str.substr(e + 1) - Math.max(0, e - 2)));
這是什麼「擴展它」是什麼意思? – phuzi
爲什麼.001是0.011的最小增量?爲什麼不是0.00000000000001例如? – jrook
@phuzi它意味着什麼在你的下面的評論問。我不想擴大一定數量的數字。我想根據給出的數字的數量來計算出,最小的增量是多少。 –