Java-返回浮点或十进制时丢失十进制格式精度
我已经回顾了一些与格式化数字相关的线程。 除值3.101外,它在大多数情况下都有效。 Float和Double与和00格式一起使用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
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数据类型删除尾随的零,因为不需要它们。出于显示目的,您可能只需要尾随零。