java - 如何使用带有可选科学记数法的 DecimalFormat 格式化数字

标签 java decimalformat

我正在使用模式“#0.00##”来格式化数字,它对大多数输入都按预期工作。但有时源编号较小,即:6.84378E-05,并被转换为“0,0001”。

是否可以使用科学记数法仅格式化这些数字(不符合标准模式)?保留所有“正常”数字不变?具有单一模式。

我必须只使用一个 DecimalFormat 模式,无需任何额外代码。

编辑:为了更好地解释为什么我需要单个 DecimalFormat:我正在使用外部库并且只能定义一个模式来配置输出。

最佳答案

您只能为正值和负值设置不同的模式。您应该这样做:

public class DecimalScientificFormat extends DecimalFormat {
    private static DecimalFormat df = new DecimalFormat("#0.00##");
    private static DecimalFormat sf = new DecimalFormat("0.###E0");

    @Override
    public StringBuffer format(double number, StringBuffer result, FieldPosition fieldPosition) {
        String decimalFormat = df.format(number);
        return (0.0001 != number && df.format(0.0001).equals(decimalFormat)) ? sf.format(number, result, fieldPosition) : result.append(decimalFormat);
    }
}

关于java - 如何使用带有可选科学记数法的 DecimalFormat 格式化数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14340872/

相关文章:

c# - 用于拆分 Amazon S3 存储桶日志列的正则表达式?

java - 是否可以用 Spock 模拟枚举?

java - Spring多对多关系的问题

Java 更改 ArrayList<Double> 中 double 型的格式

Java十进制格式格式错误

java - Hibernate异常(一对多关系): reference to unknown entity

Java for循环中数组的最小元素

java - 如何使用 DecimalFormat 仅隐藏数字 "with decimals"中的尾随零

java - 尝试从文本字段读取格式化的 double 值

java - 我为 JFormattedTextField 制作的 NumberFormatter 函数不允许输入十进制数字