在Java中将一个数字转换为2位小数

31

我想在运行时将一个数字转换为两位小数(始终显示两位小数)。我尝试了一些代码,但它只能如下所示:

 20.03034 >> 20.03
 20.3 >> 20.3  ( my code only rounds not converts )

然而,我希望它做到这一点:

 20.03034 >> 20.03
 20.3 >> 20.30 (convert it to two decimal places)

我的代码如下:

angle = a variable
angle_screen =  a variable

DecimalFormat df = new DecimalFormat("#.##");
angle = Double.valueOf(df.format(angle));
angle_screen.setText(String.valueOf(angle) + tmp);
任何关于如何做到这一点的帮助都将非常棒,谢谢。

你的代码有些问题。你使用了特殊格式将double转换为字符串,然后再将其转换回double,最后又将其转换回字符串而没有指定任何格式。我猜这是错误的。此外,“tmp”变量的目的也不明显。 - Robert
2
你应该阅读DecimalFormat的API - 答案就在那里,而且非常清晰明了。 - Paul
4个回答

78

尝试使用这个代码 new DecimalFormat("#.00");

更新:

    double angle = 20.3034;

    DecimalFormat df = new DecimalFormat("#.00");
    String angleFormated = df.format(angle);
    System.out.println(angleFormated); //output 20.30

你的代码没有正确使用DecimalFormat。

模式中的0表示必须的数字,#表示可选数字。

更新2:请查看下面的答案。

如果你想将 0.2677 格式化为 0.27,你应该使用 new DecimalFormat("0.00");,否则它会变成 .27


@Necroqubus,您将java.text.DecimalFormat(API 1)与android.icu.text.DecimalFormat(API 24)混淆了。在发布错误信息之前,请进行适当的研究。 - Asim
请注意,DecimalFormat不是线程安全的。 - BillMan

24
DecimalFormat df=new DecimalFormat("0.00");

使用这段代码可以获得精确的两位小数。即使值为0.0,输出结果也将是0.00。

如果你使用以下代码:

DecimalFormat df=new DecimalFormat("#.00");  

它不会将0.2659转换成0.27。你会得到一个类似.27的答案。


5
为什么这个没有更多的投票?!这是应该添加到被接受答案中的重要信息。 - sports
为什么我的浮点数值98786545/10^6不能转换成两位小数格式。在将其转换为两位小数后,我想将其保存为字符串。 - Manish Sharma
@sports 需要API 24级,因此对于需要兼容性的项目来说是一个相当糟糕的解决方案。 - Necroqubus

16
尝试这样做:String.format("%.2f", angle);

2
适用于API版本低于24的最佳答案!谢谢! :) - Necroqubus

2

尝试

DecimalFormat df = new DecimalFormat("#,##0.00");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接