0

私は一見非常に単純な小さなスクリプトを持っています...

function speedcomp(obj) {
    obj.speedmile.value = 3600 / obj.timesec.value
}

function distcomp(obj) {
    if (obj.speed.value == "")
        obj.speed.value = ((1 * obj.distance.value) / obj.day.value) / 24;
    else if (obj.distance.value == "")
        obj.distance.value = distance.value;
    else if (obj.day.value == "")
        obj.day.value = ((1 * obj.distance.value) / obj.speed.value) / 24;
    obj.hour.value = ((1 * obj.distance.value) / obj.speed.value);
}​

距離、速度、日、時間の ID を持つ 4 つの入力タイプのテキストがあります。速度と距離を入力して onclick="distcomp(this.form)" のボタンをクリックすると、うまく計算されます。

私が抱えている問題は、日と時間の値を最も近い 100 分の 1 に丸めようとしていることです。私は値をプリセットしていないので、Math.round と Math.floor に苦労しています。答えは Math.round を使用すると思いますが、いくつか使用できます。

前もって感謝します。

4

2 に答える 2

2

あなたはただ使うことができますtoFixed

var num = Math.random();
alert(num.toFixed(2));

IE 6 の周りにはバグのある実装がいくつかあり、javascript の 10 進数は一部の値に対して正確ではないため、予期しない結果が生じる可能性があります。

(0.595).toFixed(2) // 0.59 in Firefox, 0.60 in IE

使用する場合:

Math.round(num*100)/100

そうすると、適切なパディングが得られません (0.60 ではなく 0.59 => 0.6)。MDNには他にも興味深いスニペットがいくつかあります。

JavaScript でNumber.toFixedのプロトタイプを作成toFixedする方法は? .

編集

これは適切な toFixed 関数です。これが適切に ES5 に準拠していることを確認するためにテストを続けます。仕様に記載されているのに対し、それtoFixed(0,2)は返されますが、前者の方が便利だと思います。0.000

function toFixed(num, places) {

    var m, s = '', t;
    num = Number(num);

    if (isNaN(num)) return 'NaN';

    if (num < 0) {
      s = '-';
      num = num * -1;
    }

    m = Math.pow(10, places || 0);
    num = String(Math.round(num * m) / m).split('.');
    t = num[1] || '';
    num[1] = t + (new Array(places - t.length + 1)).join('0');

    return s + num.join('.');
};

ジャスパーのコメントは良い解決策のようです:

(Math.round(.595*100)/100).toFixed(2);

(0).toFixed(2). _ 0_ 0.00_ toFixed_

于 2012-09-05T01:24:15.237 に答える
0

100 で四捨五入するには、数値に 100 を掛け、呼び出しMath.round()てから、もう一度 100 で割ります。

num=210.653434343
Math.round(num*100)/100
210.65

100 の位に丸めるには、最初に除算し、丸めてから乗算します。100 を他の場所に変更することもできます。(10位と10位は100を10に変更)

于 2012-09-05T01:03:21.060 に答える