Java 带指数的BigDecimal格式

Java 带指数的BigDecimal格式,java,bigdecimal,exponential,largenumber,Java,Bigdecimal,Exponential,Largenumber,我在Java(Android Studio)中格式化BigDecimal时遇到问题 我想将BigDecimal格式化为String,当大于16个字符时,使用9位小数加上指数(0.000000000 e+00) 我使用了String#格式,但结果不正确,它是1.000000000e+32,而不是9.9999999e+31 我怎样才能得到正确格式的号码?这是代码 String b = "9999999999999999"; String c = "9999999999999999"; BigDeci

我在Java(Android Studio)中格式化
BigDecimal
时遇到问题

我想将
BigDecimal
格式化为
String
,当大于16个字符时,使用9位小数加上指数(
0.000000000 e+00

我使用了
String#格式
,但结果不正确,它是
1.000000000e+32
,而不是
9.9999999e+31

我怎样才能得到正确格式的号码?这是代码

String b = "9999999999999999";
String c = "9999999999999999";
BigDecimal resultMultyply = (new BigDecimal(b)).multiply(new BigDecimal(c));
String main_number = resultMultyply.toString();

if (main_number.length() > 16) {
    // main_number = 99999999999999980000000000000001
    main_number = String.format("%16.9e", new BigDecimal(main_number));
    // main_number = 1.000000000e+32
}
main\u number
在格式化之前是正确的。

使用
DecimalFormat
和舍入模式
DOWN
您的问题是,在创建输出值时,您没有掌握舍入模式。
BigDecimal
的默认舍入模式是
HALF\u UP
,这不是您想要的:您想要看到的是第一个数字。因此,这意味着您将丢弃预期精度之后的数字,这将转换为向下舍入
。不幸的是,
BigDecimal
默认情况下不提供如此精细的粒度。因此,您必须使用
DecimalFormat

总之,它是这样工作的:

import java.math.*;
import java.text.*;
public class Main {
  public static void main(String[] args) {
    BigDecimal a = new BigDecimal("9999999999999999");
    BigDecimal mul = a.multiply(a);
    System.out.println(format(mul, 9));
  }

  private static String format(BigDecimal x, int scale) {
    NumberFormat formatter = new DecimalFormat("0.0E0");
    formatter.setRoundingMode(RoundingMode.DOWN);
    formatter.setMinimumFractionDigits(scale);
    return formatter.format(x);
  }

}
产出:

9.999999999E31

您使用的是哪种语言?您发布的代码是JS吗?Javascript=/=java使用类似于big.JS的库或将数字视为字符串,因此您需要确保数字不会转换回数字。答案是Javascript,我已经意识到您粘贴的代码是Java.No。它是用Java编写的。我的错误!!它在Eclipse中工作,但在Android Studio中使用相同的代码,我得到了1.000000000 E32。@TonyKalo您在问题中根本没有指定Android Studio:这是Java原样,不是Android Studio风格的Java。您可能应该检查Android Studio是否有其他方法来实现这一点。但是我看到它与Java非常相似,所以实际上应该得到相同的结果,除非有bug?不过我会怀疑的。对不起,我是新来的。谢谢