我将双精度转换为小数点后 2 位的方法不起作用



可能的重复:
在Java中有toPrecision()的等价物吗?

我创建了一个方法,假设将数字限制在小数点后两位,但它的作用是显示小数点后2位的数字,然后显示零。

此外,从下面的数字计算中,我可以注意到它对数字的四舍五入不正确。数字应为478.03 129.06 348.97

这里怎么了?

PS。我只是在遵循伪代码,我不能导入任何超过import java.io.*;的内容

我的输出:

Employee's Last Name: dfsdfsdf
Employment Status (F or P): p
Hourly Pay Rate: 8.35
Hours Worked: 51.5
-------------------------------------------------------
Name    Status      Gross   Taxes   Net
dfsdfsdf    Part Time       478.040000  129.070000  348.970000

我输入所有数据,然后尝试输出的代码:

private static void outputData(String name, char status, double pay) 
{
if (status == "p".charAt(0))
{
System.out.println("-------------------------------------------------------");
System.out.println("NametStatusttGrosstTaxestNet");
System.out.printf("%stPart Timett%ft%ft%fnn", 
name, 
roundDouble(pay), 
roundDouble(calculateTaxes(pay)), 
roundDouble(pay - calculateTaxes(pay)));
}
else if (status == "f".charAt(0))
{
System.out.println("-------------------------------------------------------");
}
}

更多的代码,这是应该做转换的方法:

private static double roundDouble(double number) 
{
return Double.parseDouble(String.format("%.2f", number));
}

您可以尝试NumberFormat而不是

double value = 478.03123456789;
NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(2);
System.out.println(nf.format(value));

输出478.03

ps-它可能也有助于获得原始值;)

试着这样做:

private static double roundDouble(double number) 
{
return java.lang.Math.round((number * 100) / 100.0));
}

最新更新