2011-01-13 5 views
2
public string s() 
{ 
    double price = 123.12 
    double preVatPrice = (100/(100 + 20) + price); 

    return preVatPrice.ToString(); 
} 

VATを逆に計算すると、常に0が返されます。

+0

代わりに '(100d /(100 + 20))'を使って浮動小数点演算を試みましたか? – thecoop

+3

このことについてFAQはありませんか?また、価格に「ダブル」を使用しないでください。 –

+1

整数除算を修正しても、数式が正しくありません。このようなものでなければなりません、imo: 'decimal price = 123.12m; decimal preVatPrice = price/1.2m; ' – LukeH

答えて

8

これはinteger divisionです:すべてのパラメータは、浮動小数点型をしていることを確認するには

100.0/(100.0 + 20.0) 

:0

になります

100/(100 + 20) 

はにそれを確認します。


BTW - この関数はテストすると "123.12"を返します。


更新:

として、いくつかのコメントで指摘 - あなたは、金融計算にdecimalを使用する必要があり、この場合には、問題なさそうですが。

小数点の値の型は、大量の重要な整数と小数点を必要とし、丸め誤差を必要としない財務計算に適しています。

+4

しかし、お金を使って作業するときに小数点を使用することもできます。原則としてJUst。この場合はおそらく何の違いもありません。 – Joey

+0

それかもしれません。 000000 ... 1の後ろのような丸め誤差は、あなたがそれらを最低限必要とするときに起こり、少なくとも高レベルからはランダムに見えることがあります。あなたが(金)それらを容認することができない場合は、小数を使用してください。あなたが(ほとんどの3D数学)できる場合、浮動または二重はOKです。 – KeithS

1

リテラルの一部はintですが、倍精度算術演算を得るには(100.0/(100.0 + 20.0) + price)を使用してください。

0
double preVatPrice = ((double)100/(100 + 20) + price); 
関連する問題