我无法使用以下属性定义DecimalFormat
实例(在Java1.8中):
(如果有必要,我可以在没有满足第二个财产的情况下生活。)
目的是将双精度转换为字符串,即使用format
方法。以下是一些示例所需的行为:
Representation of 9: 9
Representation of 9.0: 9
Representation of 9876.6: 9877
Representation of 0.0098766: 9.877E-3
Representation of 0.0000000098766: 9.877E-9
如果我定义DecimalFormat df = new DecimalFormat("#.###E0");
,则会给出
Representation of 9: 9E0
Representation of 9.0: 9E0
Representation of 9876.6: 9.877E3
Representation of 0.0098766: 9.877E-3
Representation of 0.0000000098766: 9.877E-9
前三种情况是错误的。不允许DecimalFormat("#.###E#")
或DecimalFormat("#.###E")
之类的内容(IllegalArgumentException
被抛出)。
产生输出的代码如下所示。
DecimalFormat df = new DecimalFormat("#.###E0");
double[] xs = new double[] {9, 9.0, 9876.6, 0.0098766, 0.0000000098766};
String[] xsStr = new String[] {"9", "9.0", "9876.6", "0.0098766", "0.0000000098766"};
for(int i = 0; i < xs.length; i++) {
System.out.println("Representation of " + xsStr[i] + ": " + df.format(xs[i]));
}
答案 0 :(得分:2)
您可以尝试使用if语句检查数字是否低于1.
if (xs < 1) {
System.out.println("Representation of " + xsStr[i] + ": " + df.format(xs[i]));
}
else {
System.out.println("Representation of " + xsStr[i] + ": " + xs[i];
}
另一种选择是使用三元运算符。
System.out.println("Representation of " + xsStr[i] + ": " + xs[i] < 1 ? df.format(xs[i]) : xs[i]);
这个答案很好地解释了它的工作原理。 https://stackoverflow.com/a/25164343/
答案 1 :(得分:0)
我认为你不能使用普通的DecimalFormatter
课来达到目标。如果所有内容都使用相同的DecimalFormatter
实例,那么您可以继承DecimalFormatter
,然后在覆盖的format
方法中应用类似tristan的答案。
如果这样做,请确保解析方法不在任何地方使用,或者如果确保也要覆盖它。