1

フィートを使用可能なオブジェクトに変換するJavaScript関数があり、フィートの合計を取り、フィート/インチ/分数に分解します。

以下の例では、小数部分は 0 で、私のインチは 4 である必要があります。

私が次のものを持っているとしましょう。

var inches = 40;

以下の関数を次のように呼び出すと、 unPackDecimalFeet(40 /12);

  unPackDecimalFeet: function (feetInchFraction) {

        var inchFraction = (feetInchFraction - ~~feetInchFraction) * 12;
        return {
            feet: ~~feetInchFraction,
            inch: ~~inchFraction,
            fraction: inchFraction - ~~inchFraction
        };
    }

私の戻り値は以下です。

feet: 3
fraction: 0.9999999999999964
inch: 3

**上記の戻り値が読み取られるはずです。

feet: 3
fraction: 0
inch: 4

正しい戻り値を取得するには、足をどのように処理する必要がありますか?

4

3 に答える 3

1

最初にを掛けて1000から、計算を行い、 で割り1000ます。ここで問題になるのは、IEEE 浮動小数点演算です。さらに計算が必要な場合は、BigInteger ライブラリを調べてください。(BigInt、時々)

于 2012-09-06T18:51:09.980 に答える
0

あなたは、コード全体で取るに足らない小さな問題から身を守るために多くのことをしています。シンプルな方が良いと思います:

unPackDecimalFeet : (function (feet) {
    var flooredFeet = 0 | feet,
        flooredInches = 0 | ((feet - flooredFeet) * 12),
        inchFraction = (feet * 12) - (0 | (feet * 12));

    return {
        feet: flooredFeet,
        inch: flooredInches,
        fraction: +(inchFraction.toFixed(2)) //Rounded to two decimals
    };
})

0 |の代わりにある唯一の「トリッキー」Math.floor()です。Math.floor()メンテナンス性が向上したと感じた場合は、自由に使用してください。また、応答の「端数」の部分を 100 分の 1 インチ単位で四捨五入しました。必要に応じてより正確に丸めることもできますが、0.9999999999999994IEEE-754 が暴走するなどの事態を防ぐために、いくつかの丸めが推奨されます。

于 2012-09-06T19:42:59.283 に答える
0
var inchesIn;
inchesIn = 40;
document.writeln('Feet: ' + Math.floor(inchesIn/12));
document.writeln('Inches: ' + inchesIn%12);
于 2012-09-06T19:28:56.000 に答える