我有一个类型为double
的变量,我需要以高达3位小数的精度打印它,但它不应该有任何尾随零...
例如。我需要
2.5 // not 2.500
2 // not 2.000
1.375 // exactly till 3 decimals
2.12 // not 2.120
我尝试使用DecimalFormatter
,我做错了吗?
DecimalFormat myFormatter = new DecimalFormat("0.000");
myFormatter.setDecimalSeparatorAlwaysShown(false);
感谢。 :)
答案 0 :(得分:22)
尝试使用模式"0.###"
代替"0.000"
:
import java.text.DecimalFormat;
public class Main {
public static void main(String[] args) {
DecimalFormat df = new DecimalFormat("0.###");
double[] tests = {2.50, 2.0, 1.3751212, 2.1200};
for(double d : tests) {
System.out.println(df.format(d));
}
}
}
输出:
2.5
2
1.375
2.12
答案 1 :(得分:6)
您的解决方案几乎是正确的,但您应该替换零' 0'以十进制格式模式由哈希"#"。
所以看起来应该是这样的:
DecimalFormat myFormatter = new DecimalFormat("#.###");
该行不是必需的(默认情况下decimalSeparatorAlwaysShown
为false
):
myFormatter.setDecimalSeparatorAlwaysShown(false);
以下是javadocs的简短摘要:
Symbol Location Localized? Meaning
0 Number Yes Digit
# Number Yes Digit, zero shows as absent
指向javadoc的链接:DecimalFormat
答案 2 :(得分:4)
使用NumberFormat类。
示例:
double d = 2.5; NumberFormat n = NumberFormat.getInstance(); n.setMaximumFractionDigits(3); System.out.println(n.format(d));
输出为2.5,而不是2.500。