我在firestore数据库中有一个字段“winning”,其值为988.95. x1c 0d1x我想把值减少500或者用户在编辑文本中输入的任何值。假设这里用户输入了500。但是通过执行FieldValue.increment(-1*(Double.parseDouble(edittext.getText().toString().trim())));将值488.95000000005写入数据库
winning
FieldValue.increment(-1*(Double.parseDouble(edittext.getText().toString().trim())))
为什么会发生这种事?为什么不能只用firestore写488. 95?
sauutmhj1#
您所看到的在任何使用浮点存储小数数值的系统中都是很常见的。防止这种情况的通常方法是不以浮点值存储货币金额,而是以固定点值或货币最小面额的整个数值存储它们。在Firestore中,后一种选择是唯一的方法,这意味着您将winnning的值存储为美分。
winnning
winning: 48895
只要确保只对其他整数执行运算,该值将保持整数/长整型,唯一需要除以100的时间是向用户显示该值。另见:
1条答案
按热度按时间sauutmhj1#
您所看到的在任何使用浮点存储小数数值的系统中都是很常见的。
防止这种情况的通常方法是不以浮点值存储货币金额,而是以固定点值或货币最小面额的整个数值存储它们。
在Firestore中,后一种选择是唯一的方法,这意味着您将
winnning
的值存储为美分。只要确保只对其他整数执行运算,该值将保持整数/长整型,唯一需要除以100的时间是向用户显示该值。
另见: