13

我正在编写一个简单的java程序。我需要从输入中获取一个字符串并将其分为两部分:1-double 2-string。然后我需要对双精度进行简单计算并将结果以特定精度(4)发送到输出。它工作正常,但是当输入为0时出现问题,则无法正常工作。

例如对于这些输入,输出将是:

1公斤
产量:2.2046

3.1公斤
产量: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");
4

6 回答 6

22

DecimalFormat将允许您定义要显示的位数。即使值为零,“0”也会强制输出数字,而“#”将省略零。

System.out.print(new DecimalFormat("#0.0000").format(value)+" kg\n");应该是诀窍。

请参阅文档

注意:如果经常使用,出于性能原因,您应该只实例化一次格式化程序并存储参考:final DecimalFormat df = new DecimalFormat("#0.0000");. 然后使用df.format(value).

于 2013-09-22T17:05:55.297 回答
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 "#"

然后,调用实例“四”并在显示时传递您的双精度值:

double value = 0;
System.out.print(four.format(value) + " kg/n"); // displays 0.0000
于 2013-09-22T17:27:15.057 回答
2

我建议您使用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
于 2013-09-22T17:35:40.167 回答
2

System.out.format("%.4f kg\n", 0.0d)打印“0.0000 公斤”

于 2019-04-29T12:34:19.660 回答
0

用于DecimalFormat将您的双精度值格式化为固定精度字符串输出。

DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数。它具有多种功能,旨在使在任何语言环境中解析和格式化数字成为可能,包括对西方、阿拉伯和印度数字的支持。它还支持不同类型的数字,包括整数 (123)、定点数 (123.4)、科学计数法 (1.23E4)、百分比 (12%) 和货币金额 ($123)。所有这些都可以本地化。

例子 -

System.out.print(new DecimalFormat("##.##").format(value)+" kg\n");
于 2013-09-22T17:03:35.027 回答
0

String.format 只是浮点值的字符串表示形式。如果它没有提供最小精度的标志,那么只需用零填充字符串的末尾。

于 2013-09-22T17:08:07.793 回答