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)));
如何在“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)));