如何使用可选科学记数法使用十进制格式格式化数字
Posted
技术标签:
【中文标题】如何使用可选科学记数法使用十进制格式格式化数字【英文标题】:Howto format number with DecimalFormat with optional scientific notation 【发布时间】:2013-01-15 15:20:24 【问题描述】:我正在使用模式“#0.00##”来格式化数字,它对大多数输入都按预期工作。但有时源编号较小,即:6.84378E-05,并转换为“0,0001”。
是否可以使用科学记数法仅格式化这些数字(不符合标准模式)?保持所有“正常”数字完好无损?单一模式。
我只需要使用一个 DecimalFormat 模式,不需要任何额外的代码。
编辑:为了更好地解释为什么我需要单个 DecimalFormat :我正在使用外部库,并且只能定义一个模式来配置输出。
【问题讨论】:
为什么不能使用多个 DecimalFormat 模式?这几乎是我能看到解决这个问题的唯一方法 【参考方案1】:您只能对正值和负值有不同的模式。您应该执行以下操作:
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);
【讨论】:
以上是关于如何使用可选科学记数法使用十进制格式格式化数字的主要内容,如果未能解决你的问题,请参考以下文章