SQLite的小数位问题

Ala*_*eid 5 sqlite

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

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

任何帮助,将不胜感激.

艾伦

Don*_*ows 5

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

  1. 定点数学,或
  2. IEEE 十进制浮点数(相当不常见),或
  3. 将所有内容作为字符串处理。

提取后格式化值(从浮点数转换为字符串)是实现事物的最简单方法。您甚至可以将其隐藏在某种包装器中,以便其余代码不必处理后果。但是,如果您之后要对值进行算术运算,那么最好不要格式化,而是使用查询返回的值,因为格式化并重新转换回二进制浮点数(Python 使用的,就像绝大多数其他现代语言)由于精度降低而丢失了大量信息。