Java DecimalFormat.format不格式化数字?

时间:2012-08-01 18:50:54

标签: java

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

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

6 个答案:

答案 0 :(得分:6)

您将返回相同的double,而不是格式化程序的输出。

format() method不会改变传入的double,它会返回double的String格式。

答案 1 :(得分: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);
 }

答案 2 :(得分:1)

Formatters format方法返回String

String temp = formatter.format(area);

System.out.println(temp);

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

答案 3 :(得分:1)

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

答案 4 :(得分: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作为String返回,而第二个解决方案返回formattedArea的double值。

答案 5 :(得分:-1)

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

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

您可以使用Math.floor

,而不是转换为int
area = Math.floor(area * 10) / 10.0;

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

修改

这假设OP希望将返回值保持为double而不是String(正如其他答案所提供的那样)。