2

JavaScript を使用して整数を小数部に変換したいと考えています。

例えば:

  • 10030 -> 0.10030

  • 123 -> 0.123

私はこれを行う2つの方法を思いつきました:

var convertIntegerPartToFractionalPart1 = function(integerPart) {
    var fractionalPart = integerPart;

    while(fractionalPart > 1) {
        fractionalPart = fractionalPart / 10;
    }
    return fractionalPart;
};

var convertIntegerPartToFractionalPart2 = function(integerPart) {
    return parseFloat('.' + integerPart);
};

convertIntegerPartToFractionalPart1 は 100% 正確な結果を生成しません。たとえば、132232 は 0.13223200000000002 に変換されます。ただし、私の MacBook Pro の node.js では、convertIntegerPartToFractionalPart1 は convertIntegerPartToFractionalPart2 の 2 倍以上高速です。(convertIntegerPartToFractionalPart1 の 1000000 回の実行には 46 ミリ秒かかり、convertIntegerPartToFractionalPart2 の 1000000 の実行には 96 ミリ秒かかりました)

これを行うより良い方法はありますか?

4

4 に答える 4

2

これを試して:

function cvt3(n) {
  return n / Math.pow(10, Math.ceil(Math.log(n)/Math.LN10));
}

2 進浮動小数点の性質上、結果が正確でない可能性はまだあります (私はそう思います)。しかし、1つの部門だけを行うと役立つ場合があります。数値が小さい場合、反復は同じくらい適切で高速になる可能性があります。

console.log( cvt3(132232) ); // 0.132232 

グルタミン酸ナトリウムさんが編集したバージョンの方が速いです!

于 2013-05-24T13:32:19.027 に答える
0

例のように、末尾にゼロがある数字を維持しません。

10030 ->0.10030

ただし、文字列の前にドットを追加できます。

'.'+String(10030)-> '.10030'
于 2013-05-24T14:11:20.490 に答える