2017-03-16 10 views
0

私は数字を得るために.eval()を使用していますが、12桁の数字が収まる場所に数字を入れる必要があります。常に12桁の数字が表示されます。私は.toExponential()がこれを解決すると思っていましたが、しばしばその値は12桁を超えています。現在のコードは次のようになります -数字を12桁に合わせる

function enter() { 
    string = eval(string); 
    console.log(string.toExponential()); 
    if (string.toString().length > 12) { 
    string = string.toExponential(); 
    updateDisplay(); 
    } else { 
    updateDisplay(); 
    } 
} 

これを処理する方法はありますか?

+1

なぜあなたはまったく番号を取得するためにevalを使用している...文字列は、他の場所で定義され、任意の入力をevalingすると、コードの注入を可能にしています。 –

+0

あなたが達成したいと思っているものは、12桁の数字を13桁にすることはできません。 – n00dl3

答えて

1

が、この質問のいくつかの良い答えであるが、これは、あなたの質問

まず刺されに無変換を読んだ後、私の心に来るものであるかもしれません。

function enter(no) 
{ 
var x=no.toString(); 
var newnum=x.substring(0,11); 
//check for roundoff 
if (Number(x.substring(12))>5) 
newnum=Number(newnum)+1; 
else 
newnum=Number(newnum); 
return newnum; 
} 
0

別のオプションは、別のradixに番号を圧縮することができます。

これは文字列を評価するときにdecompressコールが必要になりますが、より大きな数字を小さなスポットに収めることができます。

function compressNumber(number) { 
 
    return number.toString(36); 
 
} 
 

 
function decompressNumber(number) { 
 
    return parseInt(number, 36); 
 
} 
 
//Test 
 
console.log("Basic number", 5, compressNumber(5)); 
 
console.log('Base 16 example', 15, compressNumber(15)); 
 
console.log('A "1" followed by 11 zeroes', Math.pow(10, 11), compressNumber(Math.pow(10, 11))); 
 
console.log('A "1" followed by 11 zeroes, negative', -Math.pow(10, 11), compressNumber(-Math.pow(10, 11))); 
 
console.log('A "1" followed by 11 zeroes, decompressing', Math.pow(10, 11), decompressNumber(compressNumber(Math.pow(10, 11)))); 
 
console.log('Biggest 12 digit compressed number', Math.pow(10, 11).toString().replace(/\d/ig, 'z')); 
 
console.log('Biggest 12 digit compressed number decompressed', decompressNumber(Math.pow(10, 11).toString().replace(/\d/ig, 'z')));

関連する問題