我有这个方法:
public void Example(BigDecimal value, int scale){
BigDecimal x = new BigDecimal("0.00001");
System.out.println("result: " + (value.multiply(x)).setScale(scale, RoudingMode.HALF_UP).toString());
Run Code Online (Sandbox Code Playgroud)
例如,如果value = 1且scale = 2,则输出为"result:0.00".我以为它会是1.00E-5.所以,我的疑问是:如果BigDecimal的比例大于某个值(在我的例子中是2),我怎么能强制用科学记数法格式化呢?
以下是DannyMo的答案版本,它自动设置比例:
private static String format(BigDecimal x)
{
NumberFormat formatter = new DecimalFormat("0.0E0");
formatter.setRoundingMode(RoundingMode.HALF_UP);
formatter.setMinimumFractionDigits((x.scale() > 0) ? x.precision() : x.scale());
return formatter.format(x);
}
System.out.println(format(new BigDecimal("0.01"))); // 1.0E-2
System.out.println(format(new BigDecimal("0.001"))); // 1.0E-3
System.out.println(format(new BigDecimal("500"))); // 5E2
System.out.println(format(new BigDecimal("500.05"))); // 5.00050E2
Run Code Online (Sandbox Code Playgroud)
您可以使用DecimalFormatwith setMinimumFractionDigits(int scale):
private static String format(BigDecimal x, int scale) {
NumberFormat formatter = new DecimalFormat("0.0E0");
formatter.setRoundingMode(RoundingMode.HALF_UP);
formatter.setMinimumFractionDigits(scale);
return formatter.format(x);
}
...
System.out.println(format(new BigDecimal("0.00001"), 2)); // 1.00E-5
System.out.println(format(new BigDecimal("0.00001"), 3)); // 1.000E-5
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5665 次 |
| 最近记录: |