我正在编写一个简单的java程序。我需要从输入中获取一个字符串并将其分为两部分:1-double 2-string。 然后我需要对double进行简单的计算,并以特定的精度将结果发送到输出(4)。它工作正常,但输入为0时出现问题,然后它无法正常工作。
例如,对于这些输入,输出将为:
1千克 输出:2.2046
3.1 kg
输出:6.8343
但是当输入为0时,输出应为0.0000,但显示为0.0。 我应该怎么做才能强制它显示0.0000?
我读过关于双精度的类似帖子,他们建议类似BigDecimal
类,但在这种情况下我不能使用它们,
我这样做的代码是:
line=input.nextLine();
array=line.split(" ");
value=Double.parseDouble(array[0]);
type=array[1];
value =value*2.2046;
String s = String.format("%.4f", value);
value = Double.parseDouble(s);
System.out.print(value+" kg\n");
答案 0 :(得分:21)
DecimalFormat
将允许您定义要显示的位数。即使值为零,“0”也会强制输出数字,而“#”将省略零。
System.out.print(new DecimalFormat("#0.0000").format(value)+" kg\n");
应该诀窍。
注意:如果经常使用,出于性能原因,您应该只实例化一次格式化程序并存储引用:final DecimalFormat df = new DecimalFormat("#0.0000");
。然后使用df.format(value)
。
答案 1 :(得分:4)
将此DecimalFormat实例添加到方法的顶部:
DecimalFormat four = new DecimalFormat("#0.0000"); // will round and display the number to four decimal places. No more, no less.
// the four zeros after the decimal point above specify how many decimal places to be accurate to.
// the zero to the left of the decimal place above makes it so that numbers that start with "0." will display "0.____" vs just ".____" If you don't want the "0.", replace that 0 to the left of the decimal point with "#"
然后,调用实例“4”并在显示时传递double值:
double value = 0;
System.out.print(four.format(value) + " kg/n"); // displays 0.0000
答案 2 :(得分:1)
我建议你使用BigDecimal
类来计算浮点值。您将能够控制浮点运算的精度。但回到主题:)
您可以使用以下内容:
static void test(String stringVal) {
final BigDecimal value = new BigDecimal(stringVal).multiply(new BigDecimal(2.2046));
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(4);
df.setMinimumFractionDigits(4);
System.out.println(df.format(value) + " kg\n");
}
public static void main(String[] args) {
test("0");
test("1");
test("3.1");
}
将为您提供以下输出:
0,0000 kg
2,2046 kg
6,8343 kg
答案 3 :(得分:0)
使用DecimalFormat
将double值格式化为固定精度字符串输出。
DecimalFormat是格式化的NumberFormat的具体子类 十进制数。它具有各种旨在实现它的功能 可以解析和格式化任何语言环境中的数字,包括支持 适用于西方,阿拉伯和印度数字。它也支持不同 各种数字,包括整数(123),定点数 (123.4),科学记数法(1.23E4),百分比(12%)和货币 金额(123美元)。所有这些都可以进行本地化。
示例 -
System.out.print(new DecimalFormat("##.##").format(value)+" kg\n");
答案 4 :(得分:0)
String.format只是表示浮点值的String表示。如果它没有提供最小精度的标志,那么只需用零填充字符串的末尾。
答案 5 :(得分:0)
System.out.format("%.4f kg\n", 0.0d)
打印'0.0000公斤'