2011-11-12 6 views
0

これは完全な仕上がりではなく、ポーランド語の言語には申し訳ありませんが、入手するのは簡単です。その次の4つの変数の後 1.ビッグドッグ 2.中型犬 3.小型犬 4.cat 訪問者の数のために、同じです。 http://pastebin.com/QPmVaPFv だから、これは獣医についてです、4つの変数は、ビジターあたりの価格のためのものです以前のように(大、中、小、猫など)変数狂気、丸め数(int、doubleなど)

することはその後のテキストは言う: すべての第五大きな犬の所有者は10%の割引 を得たすべての第三媒体主が50%割引 を得た4回ごと猫の所有者は1 $での価格を得ましたすなわち

double zdpies=ldpies/5.; 
double zspies=lspies/3.; 
double zkot=ckot/4.; 

これは私が、私はシナ---割引

せずに、通常の価格のための最終的な価格、すなわちのための計算をした割引価格

double cdpiespromo=cdpies/10.; Big dog 
double cspiespromo=cspies/50.; medium dog 
double ckotpromo=1; Cat 

上の計算で変数を作った後の割引

でその一部であります法線:21.6×51.0 = 1101.6000000000001

処理が完了しました。

そして、私はその奇妙な数字を得ました.51は大丈夫ですが、21.6は21.6でなければならない21.6が間違っています。私が "int"を使うとき、それは "精度の喪失"があり、それを修正する方法はありますか?

ここでは、割引価格と割引なしの最終価格を計算するための最後の変数があります。

double idp=ldpies-zdpies; this calculates numbers of visitors without discount 
double idc=idp*cdpies; this calculates price number of visitor * normalpriceofbigdog. 
+1

基本2浮動小数点タイプ –

答えて

0

はここhttp://firstclassthoughts.co.uk/java/traps/java_double_traps.html

ボトムラインを計算を行うために、ダブル、BigDecimalのなどフロートを使用しての素晴らしい記事があります完璧な解決策がないことです。

+0

ではなく、10進数の10進データ型を使用する必要があります。いい記事ですが、別の問題があります。 – Fokuz

1

財務計算にfloatまたはdoubleを使用しないでください。BigDecimalを使用してください。

BigDecimalを扱うのは少し面倒なので、私はBdHelperクラスを書いて、特定の演算/変換に必要なコードを短縮しました。クラスは完全なものではありません。私は本当に必要なメソッドだけを書いていましたが、あなたはそのアイデアを得ることができます。

Jon Skeet talked about the pain of using floating point numbers in StackOverflow Dev Daysロンドン。