0

列が12か月+要約であるレコードの表があります。私は単純なjQueryアクションを持っています。これonChangeは、要約行の各月の数を均等に分割するものです。

会計処理なので、数値を .00 に丸め、DB に格納します。12で割り切れない数字の入力を禁止したい。

残念ながら、私のアルゴリズムには欠陥があります:/

(例: 11 と入力すると、11.08 != 12 * 0.93 に変わります)

function round(num) {
    return Math.ceil(num * 100) / 100;
}

$("#summary").change(function() {
    var summaryValue = $(this).val();
    var monthCount = $('.month').length;

    var remainder = (summaryValue * 100) % monthCount;
    summaryValue = (summaryValue * 100 + remainder) / 100; 
    $(this).val(summaryValue);    

    var avarage = round(summaryValue / monthCount);

    $('.month').each( function( key, value ) {
        $(this).val(avarage);
    });
});

http://jsfiddle.net/igos/z3EEQ/

それをより良く実装する方法はありますか?

  1. つまり、12 で割り切れるということは、許可されるすべての数値は、coma の後に最大 2 つの数値で分割されるということです。
  2. したがって、0.92 * 12 = 11.04 であるため、11 は 11,04 に変更されます。
  3. 1324 => 1324,08 = 110,34*12
  4. 私は言うことができません: 私はユーザーが最初に入力したかった最も近い番号をユーザーに提供したいので、悪い番号です.
4

1 に答える 1

0

余りを差し引く必要があります。元の数値に最も近い数値が必要な場合は、剰余を減算し、剰余が 6 より大きい場合は 12 を加算します。

var remainder = (summaryValue * 100) % monthCount;
summaryValue = (summaryValue * 100 - remainder + (remainder > 6? 12 : 0)) / 100; 
于 2013-05-22T13:37:34.393 に答える