Skip to content

Commit 68e0ffb

Browse files
朱晔朱晔
authored andcommitted
补充BigDecimal各种初始化方式scale差异的比较的例子
1 parent b9d26c3 commit 68e0ffb

File tree

1 file changed

+19
-8
lines changed

1 file changed

+19
-8
lines changed

src/main/java/org/geekbang/time/commonmistakes/numeralcalculations/dangerousdouble/CommonMistakesApplication.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package org.geekbang.time.commonmistakes.numeralcalculations.dangerousdouble;
22

33

4+
import lombok.extern.slf4j.Slf4j;
5+
46
import java.math.BigDecimal;
57

8+
@Slf4j
69
public class CommonMistakesApplication {
710

811
public static void main(String[] args) {
9-
10-
test();
12+
testScale();
1113
System.out.println("wrong1");
1214
wrong1();
1315
System.out.println("wrong2");
@@ -30,10 +32,22 @@ private static void wrong1() {
3032
System.out.println("OK");
3133
}
3234

33-
private static void test() {
34-
System.out.println(Long.toBinaryString(Double.doubleToRawLongBits(0.1)));
35-
System.out.println(Long.toBinaryString(Double.doubleToRawLongBits(0.2)));
35+
private static void testScale() {
36+
BigDecimal bigDecimal1 = new BigDecimal("100");
37+
BigDecimal bigDecimal2 = new BigDecimal(String.valueOf(100d));
38+
BigDecimal bigDecimal3 = new BigDecimal(String.valueOf(100));
39+
BigDecimal bigDecimal4 = BigDecimal.valueOf(100d);
40+
BigDecimal bigDecimal5 = new BigDecimal(Double.toString(100d));
41+
42+
print(bigDecimal1);
43+
print(bigDecimal2);
44+
print(bigDecimal3);
45+
print(bigDecimal4);
46+
print(bigDecimal5);
47+
}
3648

49+
private static void print(BigDecimal bigDecimal) {
50+
log.info("scale {} precision {} result {}", bigDecimal.scale(), bigDecimal.precision(), bigDecimal.multiply(new BigDecimal("4.015")));
3751
}
3852

3953
private static void wrong2() {
@@ -49,9 +63,6 @@ private static void right() {
4963
System.out.println(new BigDecimal("4.015").multiply(new BigDecimal("100")));
5064
System.out.println(new BigDecimal("123.3").divide(new BigDecimal("100")));
5165

52-
System.out.println(new BigDecimal("4.015").multiply(new BigDecimal(Double.toString(100))));
53-
System.out.println(new BigDecimal("4.015").multiply(BigDecimal.valueOf(100)));
54-
5566
}
5667
}
5768

0 commit comments

Comments
 (0)