NSDeciamlNumber 3.33在插入数据库时变为0.32999999999999996 sql是正确的,但是当sql执行时数据变为0.32999999999999996。 我正在使用FMDB,我尝试了列类型REAL,DECIMAL,它们有同样的问题。 如果有办法将比例设置为DECIMAL列。我尝试过DECIMAL(8,2),它没有帮助。
答案 0 :(得分:4)
据我所知,SQLite不提供实际的十进制类型,所有类似浮点的数字都转换为双精度数。
http://www.sqlite.org/datatype3.html
对于DECIMAL(10,5):
对于TEXT和REAL存储类之间的转换,如果保留数字的前15位有效十进制数字,SQLite会认为转换是无损且可逆的。如果无法将TEXT无损转换为INTEGER或REAL,则使用TEXT存储类存储该值。
REAL(8字节“双”)是浮点数据的常用类型,如果要存储实际值3.33,则会遇到转换问题。
您的选择:
如果您想存储货币,不使用浮点数学,但使用int存储分数(或类似面额)。