2

我有下面的方法,但由于某种原因,它没有将该区域格式化为只有一位小数。感谢所有帮助。

public double beraknaArea()
    {
       DecimalFormat formatter = new DecimalFormat("#0.0");
       double area = 0;
       area = radie*radie*3.14;
       formatter.format(area);
       return area;
     }
4

6 回答 6

6

您返回的是相同的双精度,而不是格式化程序的输出。

format() 方法不会更改您传入的双精度,它返回双精度的字符串格式。

于 2012-08-01T18:52:59.853 回答
2

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);
 }
于 2012-08-01T18:54:24.363 回答
1

格式化程序格式化方法返回字符串

String temp = formatter.format(area);

System.out.println(temp);

现在您将看到格式化的代码。

于 2012-08-01T18:52:41.870 回答
1

您的语句formatter.format(area);没有修改变量area,变量仍然保持与以前相同的值,如果您想要输出,您可以返回一个字符串

于 2012-08-01T18:53:24.553 回答
0

问题是,您不是返回格式化区域,而是返回您计算但未格式化的区域。

参考以下:

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 值。

于 2012-08-01T21:00:14.237 回答
-1

您可以将数字乘以 10,将其转换为整数,然后将其除以 10.0 以获得恰好有一个小数点的双精度数。

area = ((int) (area * 10)) / 10.0;

您可以使用而不是强制转换为 intMath.floor

area = Math.floor(area * 10) / 10.0;

现在,进一步的算术可以使数字具有不同的小数位数。

编辑:

这是假设 OP 希望将返回值保留为双精度而不是字符串(正如其他答案所提供的那样)。

于 2012-08-01T19:07:02.707 回答