Round Double 值和指数表示法 (java)

Round Double value and exponential notation (java)

如何在“3.416436418”中舍入“3.416436417734133”(点后九个位置)而且如果我有“3.7578845854848E41”它舍入到“3.7578845855E41”?我正在尝试实现计算器..

您可以使用 BigDecimal 将 "scale" 添加到您的双精度值中:

Double d = 3.416436417734133;
BigDecimal round = new BigDecimal(d);
round = round.setScale(9, BigDecimal.ROUND_CEILING);
System.out.println(round);

您可以使用 DecimalFormat,我不确定其他数字,但目前您的数字在小数点前只有一个数字。因此,请检查以下示例,您可以在其中格式化双精度值。请注意您可能需要为您的用例更改格式模式的另一件事。

例如:

double d = 3.7578845854848E41;
double d2 = 3.416436417734133;
DecimalFormat f = new DecimalFormat("0.#########E0");
System.out.println(f.format(d));
System.out.println(f.format(d2));

输出:

3.757884585E41
3.416436418E0

//Replace E0 with space as format returns String

编辑:

因为您的默认语言环境。你可以像这样改变本地,

//Change locale
DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols(Locale.US);
DecimalFormat f = new DecimalFormat("0.#########E0", decimalFormatSymbols);
//And than use decimal format

您可以使用此代码。

    BigDecimal aDecimal = new BigDecimal(3.416436417734133);
    BigDecimal another = aDecimal.setScale(9, aDecimal.ROUND_HALF_UP);

    System.out.println("another: " + another);
    System.out.println(new BigDecimal(3.7578845854848E41,new 
    MathContext(11,RoundingMode.CEILING)));