我有下面的方法,但由于某种原因,它没有将该区域格式化为只有一位小数。感谢所有帮助。
public double beraknaArea()
{
DecimalFormat formatter = new DecimalFormat("#0.0");
double area = 0;
area = radie*radie*3.14;
formatter.format(area);
return area;
}
我有下面的方法,但由于某种原因,它没有将该区域格式化为只有一位小数。感谢所有帮助。
public double beraknaArea()
{
DecimalFormat formatter = new DecimalFormat("#0.0");
double area = 0;
area = radie*radie*3.14;
formatter.format(area);
return area;
}
您返回的是相同的双精度,而不是格式化程序的输出。
format() 方法不会更改您传入的双精度,它返回双精度的字符串格式。
Java 中的任何方法都不能更改已声明变量的类型,或改变任何原始值(或实际上String)。您需要返回返回formatter.format(area)的内容,而不是area.
public String beraknaArea()
{
DecimalFormat formatter = new DecimalFormat("#0.0");
double area = radie*radie*3.14;
return formatter.format(area);
}
您的语句formatter.format(area);没有修改变量area,变量仍然保持与以前相同的值,如果您想要输出,您可以返回一个字符串
问题是,您不是返回格式化区域,而是返回您计算但未格式化的区域。
参考以下:
public String beraknaArea()
{
DecimalFormat formatter = new DecimalFormat("#0.0");
double area = 0;
area = radie*radie*3.14;
String formattedArea = formatter.format(area);
return formattedArea;
}
/************ OR **************/
public double beraknaArea()
{
DecimalFormat formatter = new DecimalFormat("#0.0");
double area = 0;
area = radie*radie*3.14;
String formattedArea = formatter.format(area);
return Double.parseDouble(formattedArea);
}
第一个解决方案将 formattedArea 作为字符串返回,而第二个解决方案返回 formattedArea 的 double 值。
您可以将数字乘以 10,将其转换为整数,然后将其除以 10.0 以获得恰好有一个小数点的双精度数。
area = ((int) (area * 10)) / 10.0;
您可以使用而不是强制转换为 intMath.floor
area = Math.floor(area * 10) / 10.0;
现在,进一步的算术可以使数字具有不同的小数位数。
编辑:
这是假设 OP 希望将返回值保留为双精度而不是字符串(正如其他答案所提供的那样)。