SQLite的小数位问题

时间:2010-10-02 15:26:20

标签: sqlite

我有一个SQLite3表,其列的格式为DECIMAL(7,2),但每当我选择值不具有非零第二小数位(例如3.00或3.10)的行时,结果始终为零尾(s)缺失(例如3或3.1)。有没有办法在SELECT语句中应用格式化函数,以便获得所需的2dp?我尝试过ROUND(),但这没有效果。否则,每次执行SELECT语句时,我都必须继续将生成的列值转换为显示所需的格式(在我的情况下使用Python),这真是一种痛苦。

我甚至不介意结果是字符串而不是数字,只要它有正确的小数位数。

任何帮助将不胜感激。

艾伦

1 个答案:

答案 0 :(得分:4)

SQLite内部使用IEEE二进制浮点运算,这对于维持特定数量的小数确实不适合。要获得这种类型的十进制处理,需要以下之一:

  1. 定点数学,或
  2. IEEE十进制浮点(相当罕见)或
  3. 将所有内容都视为字符串。
  4. 提取后格式化值(从浮点转换为字符串)是实现事物的最简单方法。您甚至可以在某种包装器中隐藏它,以便其余的代码不必处理后果。 但是如果你以后要对该值进行算术运算,那么你最好不要格式化,而是使用查询返回的值,因为格式并重新转换回二进制浮点数(Python使用的,就像绝大多数其他现代语言一样)以降低的精度丢失了大量信息。