如何在 Firestore 中存储准确的数字

Ber*_*lue 5 objective-c ios firebase google-cloud-firestore

如何通过 Objective-C SDK 在 Firestore 中存储数字的精确值?

例如,如果我手动创建值为“15.9”的“abv”字段,它会显示确切的值。

在此输入图像描述

但是,如果我从 Objective-C API 将 Firestore 中的值更新为NSNumber@(15.9)我会在 Firestore 文档中获得该近似值。

在此输入图像描述

NSDictionary *data = @{@"abv": @(15.9)};
[documentReference updateData:data completion:^(NSError * _Nullable error) {

}];
Run Code Online (Sandbox Code Playgroud)

这是另一个例子。61.99我尝试存储Objective-C 应用程序中的值。61.99我可以从网络控制台手动编辑金额。我不明白为什么我可以从 Web 控制台手动输入精确的十进制值,但不能从 Objective-C API 手动输入。

在此输入图像描述 在此输入图像描述

Ber*_*lue 1

这通过使用解决了这个问题NSDecimalNumber。我现在可以精确地存储两位小数精度的数字。

NSNumber *number = (NSNumber *)value;
NSString *text = [NSString stringWithFormat:@"%.2f", number.doubleValue];
NSDecimalNumber *decimalNumber = [[NSDecimalNumber alloc] initWithString:text];
return decimalNumber;
Run Code Online (Sandbox Code Playgroud)