Float.parseFloat(java.lang.String)添加十进制数

时间:2014-03-14 21:04:18

标签: java android floating-point

我正在使用REST服务,我得到的值类似于“0.15”。我需要存储一个浮点变量,因此,对于转换,我使用:

Float.parseFloat(value); //value = "0.15"

但是,返回的值不是严格的0.15浮点数,而是得到0.150000005960464。知道我为什么要这个吗?

如果我收到没有任何小数的值(例如10),则不会发生这种情况。

4 个答案:

答案 0 :(得分:0)

如果你真的需要解析值" 0.15"如果确切代表实际值0.15,那么您需要使用BigDecimalhttp://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html):

BigDecimal parsed = new BigDecimal(value)

你的" 10"也不完全是10,BTW。

答案 1 :(得分:0)

我不知道你是否也可以在android中做这样的事情,但我发现这个解决方案环顾四周:

NumberFormat df = DecimalFormat.getInstance();
df.setMinimumFractionDigits(2);
df.setMaximumFractionDigits(2);

float b = Float.parseFloat( df.format(a));

或许您可以尝试对数字进行舍入

float b = Math.round(a * 100)/100.0f;

答案 2 :(得分:0)

这是因为Float数字无法在系统上准确表示。

使用此格式在32位架构上表示浮点数。 http://en.wikipedia.org/wiki/Single-precision_floating-point_format

在使用此格式的64位架构上。 http://en.wikipedia.org/wiki/Double-precision_floating-point_format

上述两种格式的数字表示会导致精度损失。因此,像0.15这样的数字可以奇怪地出现为0.149999999998。

当你将0.15转换为它的二进制表示时,它会给你一个经常性的数字,即0.0010011001100 ....

然而,

10有一个二进制表示,不再重复,因此可以在上述两个系统中准确表示。

然而,

0.15有一些位被删除,以适应上述发生精度损失的架构。

检查有关如何将浮点数转换为二进制数的精确数学,这将更好地帮助您了解精度损失发生的位置。 http://sandbox.mc.edu/~bennet/cs110/flt/dtof.html

答案 3 :(得分:0)

嗨,我解决了你的问题...你会用到这样你可以得到你的需要......绝对只会给出 0.15格式只使用这个...我希望你能得到你想要的答案..

    String decim= "0.15456564564564";
    String convert = String.format("%.2f", Double.valueOf(decim));
    float v = Float.parseFloat(convert);
    System.out.println(v);