我在 EditText
中输入了 179.9。当我检索它时,如果它存储为 float
,则该值是不同的。
final EditText valueInput = mEntryDialogView.getValueInput();
final CharSequence input = valueInput.getText();
final String inputAsString = input.toString().trim();
final float asFloat = Float.valueOf(inputAsString); //179.899994
final double asDouble = Double.valueOf(inputAsString); //179.9
这里有些可疑,谁能向我解释为什么浮点值不正确?即使这样,如果我将上面的 double 值转换为 float,它也会不正确。
此外,是否可以采取任何措施以等同于实际输入值的方式将值检索为 float ?
最佳答案
float 和 double 不允许精确存储十进制数,因为 float 以二进制形式(尾数 + 指数)存储,而不是列表十进制数字,两者之间没有完全匹配。您总会失去一些精度,即使系统会尝试四舍五入显示的值来弥补这一点。
Float 的最大精度大约在 6 到 9 位小数之间。
如果您想在不损失精度的情况下存储小数值,例如金额,请使用 BigDecimal
或 String
。
金额也可以存储为表示美分的整数值,但请确保您使用 BigDecimal
或一些 String
操作来进行转换而不会丢失精度。
关于android - 从 String 解析浮点值时不正确,double 有效,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35673034/