java - 强制 BigDecimals 使用科学记数法

标签 java bigdecimal

我有这个方法:

    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());

例如,如果值 = 1 且比例 = 2,则输出为“结果: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

关于java - 强制 BigDecimals 使用科学记数法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18027047/

相关文章:

java - 将Json日期转换为java日历

java - 如何使用 for 语句获取数组或数组列表中的所有 n 组三个连续元素?

java - Android 错误 : DateFormat() sometimes shows 12hr format, 当它应该显示 24 小时制时

java - 如何以编程方式将标题栏颜色更改为十六进制值?

java - Java 中的精确平方根

java - 一个 BigDecimal 约等于另一个 BigDecimal

java - 如何迭代for循环并添加到java 8中的列表?

java - bigdecimal 减法结果为指数

java - BigDecimal.intValue() 返回意外数字

java - 在java中计算和显示数字