Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BigDecimal科学符号字符串和普通字符串_Java_Bigdecimal - Fatal编程技术网

Java BigDecimal科学符号字符串和普通字符串

Java BigDecimal科学符号字符串和普通字符串,java,bigdecimal,Java,Bigdecimal,我有这段代码 BigDecimal a = new BigDecimal("8000000"); BigDecimal b = new BigDecimal("80e5"); System.out.println("a equal b? " +a.compareTo(b)); BigDecimal resultA = a.divide(new BigDecimal("1000"), BigDecimal.ROUND_UP); BigDecimal resultB = b.divide(new

我有这段代码

BigDecimal a = new BigDecimal("8000000");
BigDecimal b = new BigDecimal("80e5");
System.out.println("a equal b? " +a.compareTo(b));

BigDecimal resultA = a.divide(new BigDecimal("1000"), BigDecimal.ROUND_UP);
BigDecimal resultB = b.divide(new BigDecimal("1000"), BigDecimal.ROUND_UP);

System.out.println(resultA.compareTo(resultB));
System.out.println(resultA);
System.out.println(resultB);
结果

a equal b? 0
-1
8000
1E+5
我不明白?为什么8000000/1000和四舍五入与80e5/1000和四舍五入不同?java第一次说a与b的比较等于0?

您使用的除法将结果的比例设置为原始对象的比例:

返回一个BigDecimal,其值为this/除数,其小数位数为this.scale。如果必须执行舍入以生成具有给定比例的结果,则应用指定的舍入模式

由于从80e5创建b,其比例为-5,因此除法必须将其结果四舍五入到1e+5:

jshell> var b = new BigDecimal("80e5");
b ==> 8.0E+6

jshell> b.scale()
$4 ==> -5

jshell> var c = b.divide(new BigDecimal("1000"), BigDecimal.ROUND_UP);
c ==> 1E+5

jshell> c.scale()
$6 ==> -5
要解决此问题,可以在分割时为结果设置所需的比例:

jshell> b.divide(new BigDecimal("1000"), 0, BigDecimal.ROUND_UP);
$7 ==> 8000
使用的“分割”方法将结果的比例设置为原始对象的比例:

返回一个BigDecimal,其值为this/除数,其小数位数为this.scale。如果必须执行舍入以生成具有给定比例的结果,则应用指定的舍入模式

由于从80e5创建b,其比例为-5,因此除法必须将其结果四舍五入到1e+5:

jshell> var b = new BigDecimal("80e5");
b ==> 8.0E+6

jshell> b.scale()
$4 ==> -5

jshell> var c = b.divide(new BigDecimal("1000"), BigDecimal.ROUND_UP);
c ==> 1E+5

jshell> c.scale()
$6 ==> -5
要解决此问题,可以在分割时为结果设置所需的比例:

jshell> b.divide(new BigDecimal("1000"), 0, BigDecimal.ROUND_UP);
$7 ==> 8000

问题可以归结为为什么80e5除以1000等于100000而不是8000?。不需要compareTo和第一个BigDecimal。问题所在很清楚。@preciousbetine With compareTo,0表示相等。@Gendarme但80e5/1000是8000 System.out.printlnb.dividenew BigDecimal1000;,宪兵:我认为引入compareTo有助于澄清,虽然8000000和80e5是相等的,但如果除以相同的小数字1000,它们不会产生相同的结果。问题可以归结为为什么80e5除以1000等于100000而不是8000?。不需要compareTo和第一个BigDecimal。问题所在很清楚。@preciousbetine With compareTo,0表示相等。@Gendarme但80e5/1000是8000 System.out.printlnb.dividenew BigDecimal1000;,“除法和取整法的问题来了吗?”宪兵:我认为引入compareTo有助于澄清,虽然8000000和80e5是相等的,但当除以相同的小数字1000时,它们不会产生相同的结果。哦,我不知道java get 80e5的刻度是-5。哈哈,很好的解释,先生。哦,我不知道java get 80e5的刻度是-5。哈哈,很好的解释,先生。