我有..
目标=目标最大/难度
目标最大值 = 26959535291011309493156476344723991336010898738574164086137773096960
难度=14484.162361
目标 = 26959535291011309493156476344723991336010898738574164086137773096960/14484.162361
目标=1861311315012765306929610463010191006516769515973403833769533170
所以我在 Java 中尝试这样做
double difficulty = 14484.162361;
String targetmaxStr = "26959535291011309493156476344723991336010898738574164086137773096960";
BigDecimal targetmaxd = new BigDecimal(targetmaxStr);
BigDecimal difficultyd = new BigDecimal(difficulty);
BigDecimal targetd = targetmaxd.divide(difficultyd, MathContext.DECIMAL128);
System.out.println("target : " + targetD);
打印
目标:1.861311315012765229690386592708552E+63
我真的很期待值(value):
目标=1861311315012765306929610463010191006516769515973403833769533170
最佳答案
您遇到了三个问题。
首先,使用 targetd.toPlainString())
打印 BigDecimal
避免使用科学计数法。
其次,您使用 MathContext.DECIMAL128
过多地限制了精度。尝试使用类似 new MathContext(200)
的方法。
第三,正如评论中所讨论的那样,从 double
创建 BigDecimal
会产生一些精度问题。从 String
创建以避免这些问题。
这是所有内容:
String targetmaxStr = "26959535291011309493156476344723991336010898738574164086137773096960";
BigDecimal targetmaxd = new BigDecimal(targetmaxStr);
BigDecimal difficultyd = new BigDecimal("14484.162361");
BigDecimal targetd = targetmaxd.divide(difficultyd, new MathContext(200));
System.out.println("target : " + targetd.toPlainString());
结果:
目标:1861311315012765306929610463010191006516769515973403833769533170.51815116697448072744646582880154445957194141397542 70599065953124329244737606680298383048483144520034008751609022370030307892100271382756
关于java - BigDecimal - 如何在 Java 中进行此计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46185626/