Java DecimalFormat 在强制执行指数符号时会产生错误

标签 java exponent decimalformat

在Java中,我试图让DecimalFormat强制指数符号上的符号。当它是积极的我需要一个加号出现。从我读到的内容来看,这似乎是理所当然的,但对我自己来说,它总是会引发错误。我知道可能还有其他方法可以实现我的目标,但我想了解为什么在这个特定方法中会发生错误。

Double result = 123.456;
String sresult;

//This works
NumberFormat formatter = new DecimalFormat("0.00000E00");
        sresult = formatter.format(result); 
        System.out.println(sresult);        //1.23456E02

//This doesn't work
formatter = new DecimalFormat("0.00000E+00"); //Want to enforce the sign to appear
        sresult = formatter.format(result); 
        System.out.println(sresult);        //Expected 1.23456E+02 but error occurs

抛出的错误:

Exception in thread "main" java.lang.IllegalArgumentException:
Malformed exponential pattern "0.00000E+00"
    at java.text.DecimalFormat.applyPattern(Unknown Source)
    at java.text.DecimalFormat.(Unknown Source)
    at deccheck.main(deccheck.java:13)

我很欣赏任何见解。 谢谢, 标记

最佳答案

我想通过 j flemm 扩展解决方案。其中“E”和“-”不是常量,可以设置为 DecimalFormatSymbols 。因此替换必须遵守这一点:

public static String hoola(final String s, final DecimalFormatSymbols symbols) {
    String result;
    final String expo = symbols.getExponentSeparator();
    final char minus = symbols.getMinusSign();
    if (!s.contains(expo + minus)) { // don't blast a negative sign
    result = s.replace(expo, expo + '+');
    } else {result=s;}
    return result;
}

/**
 * @param args
 */
public static void main(final String[] args) {
    final DecimalFormat decForm = (DecimalFormat) NumberFormat
            .getInstance(Locale.GERMAN);
    final DecimalFormatSymbols newSymbols = new DecimalFormatSymbols(
            Locale.GERMAN);
    newSymbols.setExponentSeparator("*10^");
    newSymbols.setMinusSign('\u2212');
    decForm.setDecimalFormatSymbols(newSymbols);
    decForm.applyPattern("0.00000E00");
    System.out.println(hoola(decForm.format(1234.567), decForm
            .getDecimalFormatSymbols()));
    System.out.println(hoola(decForm.format(000.00567), decForm
            .getDecimalFormatSymbols()));
}

结果是:

  • 1,23457*10^+03
  • 5,67000*10^−03

关于Java DecimalFormat 在强制执行指数符号时会产生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3424792/

相关文章:

R:如何在 n-choose-k 中计算大数?

algorithm - 高功率和 double

java - DecimalFormat 忽略给定的模式但使用 Locale

java - 如何将 DecimalFormat 的小数点分隔符从逗号更改为点/点?

Java十进制格式格式错误

java - Java 中带有 volatile 的单例

java - 寻找正则表达式来将此电子邮件传递为有效

java - Joda Time : Why does Month value default to Jan regardless of date input?

根据导数或指数级别对 Mathematica 中的公式进行排序

java - 在 SQL 准备语句中放入 javascript 变量 (java)