【发布时间】:2014-01-11 14:09:45
【问题描述】:
我想强制使用小数点后两位数的格式,但我的应用在登录时崩溃了。
Log.v("log", new DecimalFormat("00.00").format("62.42"));
【问题讨论】:
标签: java android decimalformat
我想强制使用小数点后两位数的格式,但我的应用在登录时崩溃了。
Log.v("log", new DecimalFormat("00.00").format("62.42"));
【问题讨论】:
标签: java android decimalformat
你应该没问题。
Log.v("log", new DecimalFormat("00.00").format(62.42));
但是如果你认为你必须有String作为输入,那么先把它解析成Double,然后再进行操作:
Log.v("log", new DecimalFormat("00.00").format(Double.parseDouble("62.42")));
【讨论】:
DecimalFormat 继承 Format#format(Object),后者委托给 DecimalFormat#format(Object, StringBuffer, FieldPosition)。这是实现为
public final StringBuffer format(Object number,
StringBuffer toAppendTo,
FieldPosition pos) {
if (number instanceof Long || number instanceof Integer ||
number instanceof Short || number instanceof Byte ||
number instanceof AtomicInteger ||
number instanceof AtomicLong ||
(number instanceof BigInteger &&
((BigInteger)number).bitLength () < 64)) {
return format(((Number)number).longValue(), toAppendTo, pos);
} else if (number instanceof BigDecimal) {
return format((BigDecimal)number, toAppendTo, pos);
} else if (number instanceof BigInteger) {
return format((BigInteger)number, toAppendTo, pos);
} else if (number instanceof Number) {
return format(((Number)number).doubleValue(), toAppendTo, pos);
} else {
throw new IllegalArgumentException("Cannot format given Object as a Number");
}
}
所以你看,你不能传递 String 参数。
字符串62.42 已经按照您想要的方式进行了格式化。
【讨论】: