2017-04-07 42 views
-1

我已经查看了一些与格式化数有关的线程。 大多数情况下,它的作品除了价值3.101。 Float和Double已经与##和00格式一起使用。Java - 十进制格式当返回浮点数或十进制数时丢失精度

import java.text.DecimalFormat; 

public class DecimalFormatTest { 
public static void main(String[] args) 
{ 
    Float d1 = -3.1011f; 
    Double ds = -3.1011; 
    DecimalFormat df = new DecimalFormat("#.##"); 
    System.out.println (Double.valueOf(df.format(d1))); 
    System.out.println (Double.valueOf(df.format(ds))); 

    DecimalFormat df2 = new DecimalFormat("#.00"); 
    System.out.println (Double.valueOf(df2.format(d1))); 
    System.out.println (Double.valueOf(df2.format(ds))); 
} 
} 

输出是:

-3.1 
-3.1 
-3.1 
-3.1 

预期输出:

-3.10 
-3.10 
-3.10 
-3.10 

正如上面提到的,这个工程我已经测试过的所有其他号码。出于某种原因,这导致了一个问题。

任何想法是什么让这个号码如此不同以及需要额外的步骤来获得第二位数字?

请记住,关键是我想最终返回一个浮点数或双精度值。

+0

的[?我如何圆一个双在Java小数点后两位(可能的复制http://stackoverflow.com/questions/5710394/how-do-i -double-to-two-decimal-places-in-java) – Omore

+0

我不完全清楚你的问题是什么。 –

+1

删除'Double.valueOf'位,它会更好地工作。 – assylias

回答

0

这工作:

Double number = 3.101; 
System.out.printf("%.2f", number); 
+0

欢迎来到Stack Overflow!尽管您可能已经解决了此用户的问题,但仅有代码的答案对于未来出现此问题的用户来说并不是很有帮助。请编辑您的答案,以解释为什么您的代码可以解决原始问题。 –

3

试试这个。

public static void main(String[] args) 
    { 
     Float d1 = -3.1011f; 
     Double ds = -3.1011; 
     DecimalFormat df = new DecimalFormat("0.00"); 
     System.out.println (df.format(d1)); 
     System.out.println (df.format(ds)); 

     DecimalFormat df2 = new DecimalFormat("0.00"); 
     System.out.println (df2.format(d1)); 
     System.out.println (df2.format(ds)); 
    } 
+0

欢迎来到Stack Overflow!尽管您可能已经解决了此用户的问题,但仅有代码的答案对于未来出现此问题的用户来说并不是很有帮助。请编辑您的答案,以解释为什么您的代码可以解决原始问题。 –

0

这里的主要罪魁祸首是Double.valueOf。尝试删除它,它应该正常工作如下: 此外,把("#.##")会导致进一步的问题。所以宁可至少在精度之后使用任何("0.00")

import java.text.DecimalFormat; 

public class DecimalFormatTest { 
public static void main(String[] args) 
    { 
     Float d1 = -3.1011f; 
     Double ds = -3.1011; 
     DecimalFormat df = new DecimalFormat("0.00"); 
     System.out.println (df.format(d1)); 
     System.out.println (df.format(ds)); 

     DecimalFormat df2 = new DecimalFormat("0.00"); 
     System.out.println (df2.format(d1)); 
     System.out.println (df2.format(ds)); 
    } 
} 

参考:Double decimal formatting in Java

+0

谢谢,在这种情况下它是有道理的,但使用Double.valueOf是因为我实际上需要一个Double而不是一个字符串。 –

+0

请参阅参考链接。 – dildeepak

+0

@未处理 - 您不需要双数据类型用于显示目的。 Double数据类型会丢弃尾随零,因为不需要它们。您只需要显示尾随零。 – DevilsHnd