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 正确评论的那样,您可以使用双打代替:

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。您可以通过显式使用双精度来防止它,例如(注意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 回答