質問

している機能ラウンドは与えられた番号で機能を最寄りの全体がペンス.

<script type='text/javascript'>
Math.roundNumber = function(a,b){
    if(!isNaN(parseInt(a))){
        c = Math.pow(10,b);
        return (Math.round(a*c)/c);
    }
    return false;
}
</script>

しかかわることによって私はこの番号入力機能のみで未満の端数を四捨五入しており一ペンスしなければ小数点以下第三位を四捨五入して.

E.G.

15.236562213541684 would = 15.24  
9846.65456169846 would = 9846.66

と思っていただけることができるかもしれの変化 return(Math.丸(c)/c);へ return(Math.ceil(ac)/c);

明らかにした非常に間違っています。

のお役に立てるようにこの問題なのか?

**編集**

この式をしているところという名称を使うようになったので頑

a = intrest price
b = terms
c = a/b
d = c*(b-1)
e = a-d

したがって、たとえば、

a = 295.30
b = 156
c = 295.30/156 = 1.90 (rounded up to nearest decimal as above)
d = 1.90 * (b-1) = 294.50
e = 295.30 - 294.50 = 0.80

誰でもできるので右能にしますのでご注意ください。▼

こちらの ここをクリックするとそのリストの現在のコード私を含む式---その非常に旧式となって最初の頃JavaScriptであるが現在はまだないよくなりました。

誰でもできるのでクリーンで見れば、かな作業に合わせて機能しますのでご注意ください。▼

役に立ちましたか?

解決

function currency_fix(number)
{
    var unfixed_number = Math.ceil(number.toFixed(5) * 100) / 100;
    return unfixed_number.toFixed(2)
}

var a = currency_fix(295.30)
var b = currency_fix(156)
var c = currency_fix(a / b)
var d = currency_fix(c * (b - 1))
var e = currency_fix(a - d)

document.write(
    'a = ' + a + '<br />' +
    'b = ' + b + '<br />' +
    'c = ' + c + '<br />' +
    'd = ' + d + '<br />' +
    'e = ' + e + '<br />'
)

// OUTPUT
//a = 295.30
//b = 156.00
//c = 1.90
//d = 294.50
//e = 0.80

私はそれはあなたが、この場合に必要な結果を与えるようになりました。わからないことは、すべての時間を仕事に行くのだが、それはしているように思われる場合。あなたはそれが最初にしたいと私は間違いなくそれが動作確認したい。

他のヒント

が内蔵機能のため、 Number.toFixed(numDigits), で、なぜ使用しないです。

パラメータ:桁
は四捨五入する桁数表示小数点以下;この値は0 20日、オールインクルーシブの実装が任意の支援の大きな範囲の値です。この引数は省略では、0として扱われます。

戻り値:
の文字列表現数を使用しない値は指数表現とう桁桁の数字の後に小数点以下の桁数です。その数は四捨五入、必要な場合は、小数部が詰められゼロの場合は必要ないので、指定された長さです。場合の数より大きい1e+21、このメソッドは電話番号です。toString()を返します文字列値は指数表記です。●

例:

>>> new Number(15.236562213541684).toFixed(2);
"15.24"
>>> new Number(9846.65456169846).toFixed(2);
"9846.65"

この最後につい合わせ例- 9846.65456169846 小数点以下第三位を四捨五入してき 9846.65, ない 9846.66.

あなたのコードは、あなたがこの作業のために必要なものよりも複雑です。あなたは小数点が常にその小数点の両側にかかわらず、桁の長さの安定した値を表すことを知っている場合、あなたは幸運である。

1)次に、あなた必要があり、単に複数の100によって元の番号

2)の場合(番号(x.charAt(IndexOfメソッド( "")+ 1))> 4){X + = 1}、xはある電話番号

3)のparseInt

4)100で割ると、あなたが行われています。

固定小数点演算を使用するには、

アドバイスは良いアドバイスです。すべての数値は、倍精度浮動小数点数です - 残念ながら、Javascriptのには、固定小数点演算はありません。 (まあ、いくつかの明示的なサポートライブラリに引っ張ることなく、無固定小数点演算。)

テキストフィールドに入力をスクラブするために、私は(何でも可能な範囲に)文字列として数値を扱う始めました。 (必要な場合)Math.floorを介して()を整数値で動作する、小数点の左右まで部品への入力をチョップ。あなたはどちらか、第二小数点以下を過ぎて迷走数字を扱う他のエラー(彼らはとにかく何を意味するのですか?)またはとして扱うために持っている場合は、もう一度、それらをオフに分割し、整数として彼らと働くます。

あなたがいる場合のありませんのユーザー提供の値(すなわち、テキスト入力フィールドからのもの)、その後、あなたが本当にあるため、JavaScriptでこれを実行すべきではない、再び、あなたはドンを扱います」 tはあなたが本当に必要な数値ツールを持っています。

Math.round()Math.ceil()を交換すると、動作するはずです:バグはどこか別の場所でなければなりません。

。 数学関数は、とにかく数にキャストされますと、

また、私はそれが不可能な場合isNaN(parseInt())を返し、完全NaNをドロップすることをお勧めします。これはブールNaNより良いフィット感であるだけでなくfalseを返す関数、につながるます。

そして、ところで:それは金銭的な値で浮動小数点演算を使用することが悪い考えです:代わりに、固定小数点演算を使用する

! <時間>

今、私たちはあなたが何をしようとして知っていることを、ここにご例えば所望の値を計算コードは次のとおりです。

var value = 295.30;
var count = 156;
var payment = Math.ceil(value * 100 / count) / 100;
var last_payment = Math.round((value - (count - 1) * payment) * 100) / 100;

最後のお支払いは、浮動小数点値を使用することに起因する誤差を補正するために、通常は丸めする必要があるとして、すべての計算がうまくいかなかったためround()するceil()を変更します。

これは、使用のみの整数演算に一般的に良いでしょう、そう100ですべての値を乗算した値を出力するときにのみ変換します:

var value = 29530;
var count = 156;
var payment = Math.ceil(value / count);
// rounding no longer necessary as integer math is precise:
var last_payment = value - (count - 1) * payment;

いいえ、あなたは正しかった。

私は、セルの変更を使用してコードをテストし、それが動作します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top