簡體   English   中英

如何從10.0 / 3 * 3 BigDecimal和double中獲取?

[英]How to get from 10.0/3*3 BigDecimal and double?

double a = 10.0;
double b =3; 
double c = a/b;
System.out.println(c*b);//answer = 10.0

BigDecimal bigDecimal1 = BigDecimal.valueOf(c);
BigDecimal bigDecimal2 = new BigDecimal("3");
System.out.println(bigDecimal1.multiply(bigDecimal2));//answer = 10.0000000000000005

我正在嘗試制作一個計算器,但是10/3 * 3有一個問題,我不想只計算這個公式的10/3 * 3,我想返回這個公式加上浮點數的0.2323232323232。 因此,請使用BigDecimal類。 我無法獲得確切的結果,這就是我想要的10,而不是得到10.0000000000000005

我相信您的問題可能在這里

double c = a/b;
...
BigDecimal bigDecimal1 = BigDecimal.valueOf(c);

您期望雙精度可以完美代表10/3,但我懷疑它可以

也許嘗試這樣的事情,它總是將數字表示為BigDecimal

new BigDecimal("10").divide(new BigDecimal("3"))

此時,您會注意到10/3不能表示為小數

Non-terminating decimal expansion; no exact representable decimal result

您需要確定所需的精度,然后使用舍入

new BigDecimal("10")
    .setScale(10)
    .divide(new BigDecimal("3"), BigDecimal.ROUND_HALF_EVEN)

或者,您可以使用Patricia建議的有理數庫。 也許看到Java中是否有一個常用的有理數庫?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM