Codenameone BigDecimal在代码名1中可用吗?

Codenameone BigDecimal在代码名1中可用吗?,codenameone,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); pri

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除以10。我要除以BigDecimal和bigtinteger。我在三个不同的尺度上做这件事。以下是我的结果:

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类需要进行一些认真的调试吗?

您使用的是真正旧版本的CodenameOne libs吗?当我运行您的代码时,我得到以下信息:

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)

比例=0
1:1
十点十分
1/10:0.1(除以BigDecimal
1/10:0.1(除以BigInteger)

比例=1 一:1.0 10:10.0 1/10:0.1(除以BigDecimal 1/10:0.1(除以BigInteger)

比例=4 一:1.0000 10:10.0000 1/10:0.1(除以BigDecimal 1/10:0.1000(除以BigInteger)


尝试更新您的LIB,看看是否得到不同的结果。

您使用的是真正旧版本的CodenameOne LIB吗?运行代码时,我得到以下信息:

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)

比例=0
1:1
十点十分
1/10:0.1(除以BigDecimal
1/10:0.1(除以BigInteger)

比例=1 一:1.0 10:10.0 1/10:0.1(除以BigDecimal 1/10:0.1(除以BigInteger)

比例=4 一:1.0000 10:10.0000 1/10:0.1(除以BigDecimal 1/10:0.1000(除以BigInteger)


尝试更新您的LIB,看看是否会得到不同的结果。

我尝试将您的代码改编为Java SE,以将其与参考实现进行比较,但JavaSE端口似乎不支持将小数除以整数。此外,adjust scale并未公开。您能提供一个示例,说明我们如何偏离JavaSE行为吗r?根据我使用的库,adjustScale是一个公共方法。我使用它是因为我找不到任何其他方法来为“1.0000”创建BigDecimal。此外,我看到这种行为,无论我是除以BigDecimal还是除以BigInteger。至于你的请求,我不确定你所说的“我们如何偏离Java SE行为”是什么意思我从CodenameOne模拟器中的init()方法调用了这个方法,只是为了测试我使用BigDecimal的代码。你是说我在实际设备上运行它时会得到不同的结果吗?我还看到了BigDecimal的其他问题。如果我这样做:final BigInteger iTen=new BigInteger(“10”);BigDecimal twoPtFive=新的BigDecimal(iTen,2);我得到的值是2.10,而不是2.50。-已删除-请参阅下面的答案。我尝试将您的代码改编为Java SE,以将其与参考实现进行比较,而JavaSE端口似乎不支持将小数除以整数。此外,adjust scale未公开。您能否提供一个示例,说明我们与JavaSE的不同之处这种行为?根据我使用的库,adjustScale是一种公共方法。我使用它是因为我找不到任何其他方法来为“1.0000”创建BigDecimal。此外,我看到这种行为,无论我是除以BigDecimal还是除以BigInteger。至于你的请求,我不确定你的意思是什么“我们如何偏离Java SE行为。”我从CodenameOne模拟器中的init()方法调用了这个方法,只是为了测试我使用BigDecimal的代码。你是说当我在实际设备上运行它时,我会得到不同的结果吗?我也看到了BigDecimal的其他问题。如果我这样做:final BigInteger iTen=new BigInteger(“10”);BigDecimal twoPtFive=新的BigDecimal(iTen,2);我得到的值是2.10,而不是2.50。-删除-见下面我的答案根据CodenameOne的人员所说,我应该在发送构建时得到一个更新的库。所以我尝试了,但仍然得到了相同的结果。你使用的是旧插件吗?你使用的是哪个IDE?仅供参考@steve hannah为我们工作我使用的是IntelliJ 15.0.3,我只是禁用了以前的插件(我六个月前才安装)下载并安装了一个新的。该项目是在以前的插件下创建的。我还可以补充一下,我的CodenameOne.jar文件的日期是2015年11月24日9:25 pm据CodenameOne的人说,当我发送构建时,我应该会得到一个更新的库。所以我尝试了,但仍然得到相同的结果。你使用的是旧插件吗?哪个你在使用IDE吗?FYI@steve hannah为我们工作。我在使用IntelliJ 15.0.3,我刚刚禁用了以前的插件(我六个月前才安装),下载并安装了一个新插件。该项目是在以前的插件下创建的。我还可以补充一下,我的CodenameOne.jar文件日期是2015年11月24日晚上9:25