android 使用小数时,FieldValue.increment产生错误的总和

y1aodyip  于 2023-03-06  发布在  Android
关注(0)|答案(1)|浏览(103)

我在firestore数据库中有一个字段“winning”,其值为988.95. x1c 0d1x
我想把值减少500或者用户在编辑文本中输入的任何值。假设这里用户输入了500。但是通过执行FieldValue.increment(-1*(Double.parseDouble(edittext.getText().toString().trim())));
将值488.95000000005写入数据库

为什么会发生这种事?为什么不能只用firestore写488. 95?

sauutmhj

sauutmhj1#

您所看到的在任何使用浮点存储小数数值的系统中都是很常见的。
防止这种情况的通常方法是不以浮点值存储货币金额,而是以固定点值或货币最小面额的整个数值存储它们。
在Firestore中,后一种选择是唯一的方法,这意味着您将winnning的值存储为美分。

winning: 48895

只要确保只对其他整数执行运算,该值将保持整数/长整型,唯一需要除以100的时间是向用户显示该值。
另见:

相关问题