2016-12-20 7 views
2

おそらくこれは以前に尋ねられた質問と重複していますが、答えを見つけることができませんでした。 私はjavascriptを使用していて、p1が正の整数でp2が整数(負または正)である場合、p1 * 10^p2の数を表示しようとしています。 残念ながら、数値のバイナリ表現のため、次の関数は機能しません。10進数を正確に表示する方法は?

function toDisplay(p1, p2) {return p1*Math.pow(10, p2);} 

多くの場合、必要な正確な形式のおおよその値にすぎない長い10進数を返します。誰かが私にこの機能を変更させる助けてもらえますか?私が必要とするのは、p1の小数点をp2の位置(p2の符号に応じて左または右)にシフトし、必要に応じて0を追加することです。私は答えとして文字列が必要です。私はこれをやろうとしましたが、それを動作させる方法を理解できませんでした。 ご協力いただければ幸いです。

+0

https://github.com/MikeMcl/big.js/こちらをご覧ください。 –

+0

いくつか例を挙げてもらえますか? p1 =πと同様に、p2 =πこれらの入力値から得たい結果は得られますか? – vothaison

+0

整数に小数点が入っていないので、問題があります。 – zerohero

答えて

0

あなたは10の累乗を扱っている、とあなただけの小数でそれらを表示するに関係しているので、これは動作します:

function repeatStr(s, n){ 
    // returns s, repeated n times. 
    if(String.prototype.repeat){ 
     return s.repeat(n); 
    } 
    var res = ""; 
    for(var i=0; i<n; i++){ 
     res += s; 
    } 
    return res 
} 

function getDecimal(p1, p2) { 
    // returns the decimal representation, as a string, of p1*10^p2. 
    p1 = p1.toString(); 
    if (p2 === 0) { 
     return p1 //p1*10^0 == p1*1 == p1. 
    } 
    if(p2 > 0) { 
     // multiplying by 10^p2 just adds p2 0's. 
     return p1 + repeatStr("0", p2); 
    } else { 
     // p1 is negative, so we have (-p2)-1 0's after the decimal point. 
     return "0." + repeatStr("0", (p2*-1) - 1) + p1; 
    } 
} 
+0

ありがとう、これは私のために完全に動作します。 –

+0

ようこそ。ところで、p2が大きくなる場合は、RepeatSTRを実装する方が速いです:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/repeat#Polyfill。私はこのバージョンを使用しました。なぜなら、それはより短く、より明確であり、文字列の繰り返しはこの答えのポイントではありません。 – bigblind

0

はまあMath.round(number * 100000)/100000

0

を試してみてください、あなたはしないことを望みます嫌いeval

function toDisplay(p1, p2) { 
    return eval(p1 + 'e' + p2); 
} 

これは浮動小数点数を返します。 + ""を使って文字列にすることができます。

関連する問題