Javaで確率とパーセントを表現して操作する正しい方法は何ですか?

What is the correct way to represent and manipulate probabilities and percents in Java?


質問 written by cdeszaq @2011-10-21 19:26:31Z

: 6 : 2 : 1

Javaで確率を計算して操作し、それらをパーセンテージで表現する場合、確率を表すために使用する最適なデータ構造は何ですか?

ネイティブのdoubleおよびfloatは、丸めが複数回発生して複合されるとエラーを引き起こす可能性がある奇妙な丸めの問題があるため、特に理想的な候補のようには見えません。

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

注:この場合、計算される確率は、カードのデッキが関係しているものに似ていますが、何百ものカードがあります。 より数学に傾倒するために、私は特に多変量Hypergeometric_distributionsで作業しています。

コメント 1

それらは常に整数の割合になりますか?その場合は、intを使用します。BigIntegerは、通常の整数に収まる値よりも大きくならないため、過剰です。

written by ポールトムブリン @2011-10-21 19:18:40Z

コメント 2

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

written by cdeszaq @2011-10-21 19:25:09Z

回答 1 written by Community @2017-05-23 12:09:11Z
5

確率に関して言えば、分数を扱うことで恩恵を受けると思います。

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

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

コメント 1

直前まで物事を分数で保持する(そしてパーセントに切り替える)のは良い考えのようです。+1

written by cdeszaq @2011-10-21 19:28:41Z

コメント 2

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

written by aioobe @2011-10-21 19:29:11Z

回答 2 written by cdeszaq @2011-12-20 13:56:42Z
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);