0

BigDecimal の問題を解決しようとしています。私のコード:

BigDecimal tweetcount = new BigDecimal(3344048);
BigDecimal emotionCountBig = new BigDecimal(855937);
BigDecimal emotionCountSentenceBig = new BigDecimal(84988); 

MathContext mc = new MathContext(64);
PMI[cnt] = (emotionCountSentenceBig.divide((tweetcount.multiply(emotionCountBig,mc)),RoundingMode.HALF_UP));

私がやりたいことは次のとおりです。emotionCountSentenceBig/(emotionCountBig*tweetcount)

(値は大きくなる可能性があります)

これを試してみるとゼロになりますが、これは不可能です。助けはありますか?

4

2 に答える 2

4

除算にも MathContext を指定する必要があります。

emotionCountSentenceBig.divide(tweetcount.multiply(emotionCountBig, mc), mc);

これにより、期待される結果が得られます。

2.969226352632111794036880818610913852084810652372969382467557947E-8

@PeterLawrey によって正しくコメントされているように、代わりに double を使用できます。

public static void main(String[] args) throws Exception {
    double tweetcount = 3344048;
    double emotionCount = 855937;
    double emotionCountSentence = 84988;

    double result = emotionCountSentence / (tweetcount * emotionCount);

    System.out.println("result = " + result);
}

これは次を印刷します:

結果 = 2.9692263526321117E-8

使用する場合は次のことに注意してください。

double result = 84988 / (3344048 * 855937);

実際に整数に対して操作 (* および /) を実行すると、0 が返されます。たとえば、double を明示的に使用することでこれを防ぐことができます ( に注意してくださいd)。

double result = 84988d / (3344048d * 855937);
于 2012-12-03T11:30:22.690 に答える
2

私は使うだろうdouble

int tweetcount = 3344048;
int emotionCountBig = 855937;
int emotionCountSentenceBig = 84988;

double pmi = emotionCountSentenceBig/((double) tweetcount * emotionCountBig);
System.out.println(pmi);

版画

2.9692263526321117E-8

BigDecimal を使用した答えに近い

2.969226352632111794036880818610913852084810652372969382467557947E-8
于 2012-12-03T11:48:15.087 に答える