BigDecimal可以在Codename中使用吗?

时间:2016-02-03 22:31:48

标签: codenameone

BigDecimal在CodenameOne中是否可用?我错了价值观。例如,这是一段代码,以及它产生的输出:

private static void testBigDecimal() {
  BigDecimal bdOne = new BigDecimal(BigInteger.ONE, 0);

  final BigInteger iTen = new BigInteger("10");
  BigDecimal bdTen = new BigDecimal(iTen, 0);
  printValues(bdOne, bdTen, iTen, 0);

  BigDecimal bdOne1 = bdOne.adjustScale(1);
  BigDecimal bdTen1 = bdTen.adjustScale(1);
  printValues(bdOne1, bdTen1, iTen, 1);

  BigDecimal bdOne4 = bdOne.adjustScale(4);
  BigDecimal bdTen4 = bdTen.adjustScale(4);
  printValues(bdOne4, bdTen4, iTen, 4);
}

private static void printValues(BigDecimal one, BigDecimal ten, BigInteger iTen, int scale) {
  System.out.println("Scale = " + scale);
  System.out.println("One:  " + one);
  System.out.println("Ten:  " + ten);
  System.out.println("1/10: " + one.divide(ten) + " (divide by BigDecimal");
  System.out.println("1/10: " + one.divide(iTen) + " (divide by BigInteger)");
  System.out.println("");
}

所以我创造了1和10的值,并且我将其除以1。我除以BigDecimal和BigInteger。而且我在三个不同的规模上这样做。以下是我的结果:

Scale = 0
One:  1
Ten:  10
1/10: 0 (divide by BigDecimal
1/10: 0 (divide by BigInteger)

Scale = 1
One:  1.0
Ten:  10.0
1/10: 0.0 (divide by BigDecimal
1/10: 0.0 (divide by BigInteger)

Scale = 4
One:  1.0000
Ten:  10.0000
1/10: 0.0001 (divide by BigDecimal
1/10: 0.0001 (divide by BigInteger)

所以有时候一分十分给我零,有时候它给我0.0001!我做错了什么吗?或者BigDecimal类需要进行一些严格的调试吗?

1 个答案:

答案 0 :(得分:0)

您使用的是旧版本的CodenameOne库吗?运行代码时,我得到以下内容:


Scale = 0
One:  1
Ten:  10
1/10: 0.1 (divide by BigDecimal
1/10: 0.1 (divide by BigInteger)

Scale = 1 One: 1.0 Ten: 10.0 1/10: 0.1 (divide by BigDecimal 1/10: 0.1 (divide by BigInteger)

Scale = 4 One: 1.0000 Ten: 10.0000 1/10: 0.1 (divide by BigDecimal 1/10: 0.1000 (divide by BigInteger)

尝试更新您的图书馆,看看您是否得到了不同的结果。