如何在核心数据中存储带小数的带符号数字

时间:2012-05-09 17:43:08

标签: objective-c core-data

尝试存储货币,可以是负数/正数,带小数。我做了很多搜索,发现在模型中使用Decimal类型是最好的方法。这似乎没有签署的想法。我看到你可以存储有符号整数(无小数)。但是我找不到有关存储带符号的十进制数的任何信息。

由于我没有找到任何东西,我猜你不能 如果是这样,你如何存储这种信息?创建一个布尔属性,描述金额是否为负/ pos?

1 个答案:

答案 0 :(得分:2)

CoreData中的“Decimal”类型使用SQLite“Decimal”存储类,该类由“Real”存储类支持。

这将支持商店级别的负数:

sqlite> .tables
test
sqlite> .schema
CREATE TABLE test (pk integer primary_key, d double, f float, r real);
sqlite> insert into test (d,f,r) values (-1.0, -1.5, -1.252853);
sqlite> select * from test;
|-1.0|-1.5|-1.252853

如您所见,SQLite正确存储了值。

在您的目标C代码中,您将使用NSNumber类,可以使用以下代码使用负小数进行实例化:

[NSDecimalNumber numberWithDouble:-1.57];
[NSDecimalNumber numberWithFloat:-1.57];