Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-返回浮点或十进制时丢失十进制格式精度_Java_Double_Precision - Fatal编程技术网

Java-返回浮点或十进制时丢失十进制格式精度

Java-返回浮点或十进制时丢失十进制格式精度,java,double,precision,Java,Double,Precision,我已经回顾了一些与格式化数字相关的线程。 除值3.101外,它在大多数情况下都有效。 Float和Double与和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

我已经回顾了一些与格式化数字相关的线程。 除值3.101外,它在大多数情况下都有效。 Float和Double与和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("#.##");
    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
如上所述,这适用于我测试过的所有其他数字。出于某种原因,这导致了一个问题

关于是什么使这个数字如此不同,需要采取什么额外的步骤才能得到第二位数字,有什么想法吗

请记住,关键是我希望最终返回一个Float或Double

这是有效的:

Double number = 3.101;
System.out.printf("%.2f", number);
试试这个

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.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.valueOf bits,效果会更好。您正在正确格式化该值,但随后将其重新解析为Double,这将删除尾随的零。我删除了Double.valueOf,它使用.00格式工作,但我确实需要返回一个双精度值,而不是字符串。欢迎使用堆栈溢出!虽然您可能已经解决了该用户的问题,但仅使用代码的答案对将来遇到此问题的用户没有多大帮助。请编辑您的答案,解释为什么您的代码解决了原始问题。欢迎使用堆栈溢出!虽然您可能已经解决了该用户的问题,但仅使用代码的答案对将来遇到此问题的用户没有多大帮助。请编辑您的答案以解释代码解决原始问题的原因。谢谢,在这种情况下使用Double.valueOf是有意义的,但使用Double.valueOf是因为我实际上需要一个Double而不是字符串。请参阅参考链接。@Unhandled-但是,出于显示目的,您不需要Double数据类型。Double数据类型删除尾随的零,因为不需要它们。出于显示目的,您可能只需要尾随零。