2011-10-21 2 views
6

Javaで確率を計算して操作し、それをパーセンテージで表現するとき、それらを表現するのに使う最良のデータ構造は何ですか?Javaで確率とパーセントを表現し操作する正しい方法は何ですか?

ネイティブのdoublefloatは、丸めが複数回発生して複合化されるときにエラーを招く奇妙な丸めの問題があるため、特に理想的な候補のようには見えません。

BigIntegerは、順列と組み合わせを計算するのに適しています。BigDecimalは、整数以外の値の候補として適しているようですが、すでにパーセントを処理するのに適していますか?

注:この場合、計算される確率は、カードのデッキに関係するものと本質的に類似していますが、何百ものカードがあります。より多くの数学的傾向については、私は具体的にMultivariate Hypergeometric_distributionsと働いています。

+0

彼らは常に整数パーセンテージになりますか?その場合は、intを使用します。 BigIntegerは、あなたの数が通常の整数に収まるものより大きくならないので、過剰なものです。 –

+0

いいえ、パーセンテージは通常[0,1]の範囲ですが、 '23.29945%'のような形式で表示されます。 'BigInteger'は階乗計算に使用されます。 – cdeszaq

答えて

5

それは確率に来るとき、私は疑うだろう分数を使って作業することで恩恵を受けるでしょう。

はこの質問を見てください:

そうでなければ私はBigDecimalは、あなたの最良の選択だと思います。しかし、注意してくださいjava.lang.ArithmeticException: Non-terminating decimal expansion;

+0

最後の分まで物事を分けておくと(そして、パーセントに切り替える)、それはよいアイデアかもしれないようです。 +1 – cdeszaq

+0

少なくとも丸めの問題はありません:) – aioobe

0

これは私が二重にどうなるのかですが、私はダブルを使用してパーセントで良い値を取得するための最良のだろうと思います...

import java.text.NumberFormat; 
//instance variable: 
private static NumberFormat percent = NumberFormat.getPercentInstance(); 

//inside any method or event: 
myAprValue = userInput/100; 
percent = new DecimalFormat("0.0#%"); 

String st = percent.format(myAprValue); 
関連する問題