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
なぜ0.001が0.011の最小増分ですか?なぜ0.00000000000001になりませんか? – jrook
@phuziあなたの下のコメントに正確に何が頼まれたかを意味します。私はある数字が持つ数字の量を拡大したくない。私は与えられた数字の量に基づいて把握したい、最小の増分は何ですか? –