Java中具有特定精度的双精度值

2022-09-04 06:54:00

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

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

1公斤
产量:2.2046

3.1 kg
产量:6.8343

但是当输入为 0 时,输出应为 0.0000,但它显示 0.0 。我该怎么做才能强制它显示0.0000?

我读了类似的关于双精度的文章,他们建议像class这样的东西,但在这种情况下我不能使用它们,我这样做的代码是: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");

答案 1

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

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

查看文档

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


答案 2

将此 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 "#"

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

double value = 0;
System.out.print(four.format(value) + " kg/n"); // displays 0.0000

推荐