gpt4 book ai didi

java - 使用 Java 将 double 值转换为 BigInteger 值的最佳方法

转载 作者:搜寻专家 更新时间:2023-11-01 01:25:51 24 4
gpt4 key购买 nike

是否有将 double 值转换为 BigInteger 值并稍后返回的正确方法?在最好的情况下不会丢失数据。问题是,我不知道 double 值有多少位小数。但是我需要一个只适用于非十进制值的算法的转换。算法完成后,我必须将其转换回来。

我需要的一个简单示例:例如 2 个 double 值的总和,但“sum”函数仅适用于 BigInteger。

最佳答案

您可以通过 5 个步骤完成:

double d1 = 0.1; //your original double
BigDecimal bd1 = new BigDecimal(d1); //convert to BigDecimal
BigInteger bi = bd1.unscaledValue(); //convert to BigInteger
//here do your stuff with the BigInteger
BigDecimal bd2 = new BigDecimal(bi, bd1.scale()); //back to BigDecimal, applying scale
double d2 = bd2.doubleValue(); //convert to double

应用于sum 方法的完整示例

输出:

0.1 + 0.1 = 0.2
0.1 + 10.1 = 10.2
0.1245 + 17.0 = 17.1245

代码:

public static void main(String[] args) {
test(0.1, 0.1);
test(0.1, 10.1);
test(0.1245, 17);
}

private static void test(double d1, double d2) {
System.out.println(d1 + " + " + d2 + " = " + sum(d1, d2));
}

private static double sum(double d1, double d2) {
BigDecimal bd1 = new BigDecimal(d1);
BigDecimal bd2 = new BigDecimal(d2);

int shift = Integer.max(bd1.scale(), bd2.scale());

BigInteger bi1 = bd1.scaleByPowerOfTen(shift).toBigInteger();
BigInteger bi2 = bd2.scaleByPowerOfTen(shift).toBigInteger();

BigInteger sum = sum(bi1, bi2);

return new BigDecimal(sum, shift).doubleValue();
}

private static BigInteger sum(BigInteger i1, BigInteger i2) {
return i1.add(i2);
}

关于java - 使用 Java 将 double 值转换为 BigInteger 值的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29534106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com