从几个科学计数法中获取数字
Get number from several scientific notations
我有几个字符串需要使用 NumberFormat 获得 Double。
字符串可以有多种格式,如下所示:
"0" // case 1
"0.00003" // case 2
"5e-76" // case 3
"2E-10" // case 4
我使用以下代码获取双精度值:
NumberFormat numberFormat = NumberFormat.getInstance(Locale.US);
String val = "2e-7";
try {
Number number = numberFormat.parse(val);
System.out.println("number: " + number.doubleValue());
} catch (ParseException ex) {
System.out.println("error: " + ex);
}
除了第 3 种情况(运行 上面的代码将打印 "number: 2.0")
要求:
我知道 Double.valueOf(val)
在这里可以正常工作,但我正在寻找仅使用 NumberFormat 的解决方案。
有可能实现吗?
案例 3 失败,因为 "e" 是小写。我们可以创建 NumberFormat 的子类,在解析之前将字符串大写。
public final class CaseInsensitiveNumberFormat extends NumberFormat {
private final NumberFormat mParent;
private final Locale mLocale;
public CaseInsensitiveNumberFormat(Locale locale) {
mParent = NumberFormat.getInstance(locale);
mLocale = locale;
}
@Override
public final Number parse(String s, ParsePosition pos) {
return mParent.parse(s.toUpperCase(mLocale), pos); // <------
}
@Override
public final StringBuffer format(double number, StringBuffer appendTo, FieldPosition pos) {
return mParent.format(number, appendTo, pos);
}
@Override
public final StringBuffer format(long number, StringBuffer appendTo, FieldPosition pos) {
return mParent.format(number, appendTo, pos);
}
}
NumberFormat fmt = new CaseInsensitiveNumberFormat(Locale.US);
System.out.println(fmt.parse("0")); // 0
System.out.println(fmt.parse("0.00003")); // 3.0E-5
System.out.println(fmt.parse("5e-76")); // 5.0E-76
System.out.println(fmt.parse("2E-10")); // 2.0E-10
我有几个字符串需要使用 NumberFormat 获得 Double。 字符串可以有多种格式,如下所示:
"0" // case 1
"0.00003" // case 2
"5e-76" // case 3
"2E-10" // case 4
我使用以下代码获取双精度值:
NumberFormat numberFormat = NumberFormat.getInstance(Locale.US);
String val = "2e-7";
try {
Number number = numberFormat.parse(val);
System.out.println("number: " + number.doubleValue());
} catch (ParseException ex) {
System.out.println("error: " + ex);
}
除了第 3 种情况(运行 上面的代码将打印 "number: 2.0")
要求:
我知道 Double.valueOf(val)
在这里可以正常工作,但我正在寻找仅使用 NumberFormat 的解决方案。
有可能实现吗?
案例 3 失败,因为 "e" 是小写。我们可以创建 NumberFormat 的子类,在解析之前将字符串大写。
public final class CaseInsensitiveNumberFormat extends NumberFormat {
private final NumberFormat mParent;
private final Locale mLocale;
public CaseInsensitiveNumberFormat(Locale locale) {
mParent = NumberFormat.getInstance(locale);
mLocale = locale;
}
@Override
public final Number parse(String s, ParsePosition pos) {
return mParent.parse(s.toUpperCase(mLocale), pos); // <------
}
@Override
public final StringBuffer format(double number, StringBuffer appendTo, FieldPosition pos) {
return mParent.format(number, appendTo, pos);
}
@Override
public final StringBuffer format(long number, StringBuffer appendTo, FieldPosition pos) {
return mParent.format(number, appendTo, pos);
}
}
NumberFormat fmt = new CaseInsensitiveNumberFormat(Locale.US);
System.out.println(fmt.parse("0")); // 0
System.out.println(fmt.parse("0.00003")); // 3.0E-5
System.out.println(fmt.parse("5e-76")); // 5.0E-76
System.out.println(fmt.parse("2E-10")); // 2.0E-10