2017-10-09 12 views
1

JavaScriptで拡張機能を使用せずに特定の数字の最小増分を得ることができる組み込み機能はありますか?例:数字の最小増分の検索

var i = 0.0003412 
smallest increment = 0.0000001 

var j = 0.011 
smallest increment = 0.001 

最後に1をスローすることは可能です。しかし、より良い方法がありますか?

+0

に変更することでこれを固定できます。「拡張する」とはどういう意味ですか? – phuzi

+0

なぜ0.001が0.011の最小増分ですか?なぜ0.00000000000001になりませんか? – jrook

+0

@phuziあなたの下のコメントに正確に何が頼まれたかを意味します。私はある数字が持つ数字の量を拡大したくない。私は与えられた数字の量に基づいて把握したい、最小の増分は何ですか? –

答えて

0

これはあなたの質問です。自分で解決策を考え出す必要があります。このようなもの:

Math.pow(0.1, String(num).split('.')[1].length) 
0

値を解析する別のアプローチ。

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-101.234e+10の間に論理に違いがあるはずですか?
単純なMath.min(1, smallestIncrement(nr))を実行するか、コードをreturn Number("1e" + Math.min(0, str.substr(e + 1) - Math.max(0, e - 2)));

関連する問題