0
float f = 0.00f;
System.out.println(f);      

给出输出:

0.00

我想将一个以百分比表示的数字格式化为小数点后 2 位。但结果应该是浮点数不是字符串。

例如

10.001 needs to be converted to 10.00
0.0 needs to be converted to 0.00
78.8  needs to be converted to 78.80 

如此格式化的值将被分配给一个浮点数..如何做到这一点?

4

4 回答 4

7
private float parse(float val){       
     DecimalFormat twoDForm = new DecimalFormat("#.##");
     return Float.valueOf(twoDForm.format(val));
}

只要你调用它传递一个有效的浮点数,你的结果就是一个浮点数。但是如果它不是字符串,则不能显示最右边的零。

于 2012-11-27T21:27:16.623 回答
2

在一般情况下,您不能这样做。不能保证一个特定的十进制值可以用一个只有小数点右边两位数的浮点数来表示。

对于这种精度,浮点数是错误的数据类型。您需要改用十进制类型或缩放整数。

分配的工作方式相同。如果将值 133.47 分配给浮点变量,您的环境会将最接近的有效浮点数分配给变量。最接近的有效浮点数可能不是 133.47。

您可以在 C 中编译和执行该程序。

#include <stdio.h>

int main (void) {
  float r;
  r = 133.47;
  printf("%.2f, %f\n", r, r);
  return 0;
}

它在我的系统上打印这些值

$ ./a.out
133.47, 133.470001

格式化到小数点后两位改变了 'r' 的外观,但它并没有改变它的值。您的系统将根据实际值而不是格式化值进行浮点运算。(除非您还更改了数据类型。)

于 2012-11-27T21:24:12.160 回答
0

浮点数没有小数位。他们有二进制的地方。因此,唯一可以用浮点数精确表示到小数点后两位的分数是 0、0.25、0.5、0.75。在所有其他情况下,您所要求的都是不可能的。

于 2012-11-28T01:24:15.743 回答
0
import java.text.DecimalFormat;

public class Padding {
    public static void main(String[] args) {
        float value = 10.001f;
        DecimalFormat decimal = new DecimalFormat("0.00");

        String formattedValue = decimal.format(value);
        System.out.println(formattedValue);
    }

}

输出:10.00

于 2015-12-01T13:08:02.307 回答