将float与数字相乘时获得意外结果

时间:2014-08-14 11:55:20

标签: java android floating-point type-conversion multiplication

我的货币转换器出现意外结果。以下是相关代码:

val = Float.parseFloat(values);

us=val*0.27f;
usa.setText(Float.toString(us));

pk=val=26.95f*val;
pak.setText(Float.toString(pk));

u=val*0.16f;
uk.setText(Float.toString(u));

om=val*0.10f;
oman.setText(Float.toString(om));

ks=val*1.02f;
ksa.setText(Float.toString(ks));

e=val*0.20f;
eu.setText(Float.toString(e)

我明白了:

us=0.27
e=0.2
uk=0.16
ksa=1.02
oman=2.69
pak=26.95

oman - 值不正确。为什么呢?

4 个答案:

答案 0 :(得分:3)

下面:

pk=val=26.95f*val;

您覆盖val值。删除val=,它应该可以正常工作。

答案 1 :(得分:0)

PK = VAL = 26.95f * VAL; overwiting ..

答案 2 :(得分:0)

你知道Float.parseFloat的参数类型是String吗?实际上parseFloat方法用于解析String to Float,但是你在评论中说所有的变量都是float !!

答案 3 :(得分:-1)

浮点数,双精度数,浮点数,双精度数在java中不准确。例如:

double number1 = 0.58 * 100;    
System.out.println("" + number1);

,输出为57.99999999999999,不是预期的58。可以使用BigDecimal类来获得准确的性能。