【问题标题】:SQLite format number with 2 decimal places alwaysSQLite 格式数字始终保留 2 位小数
【发布时间】:2012-02-05 11:59:14
【问题描述】:

我在 SQLite 数据库中有一些包含 FLOAT 列类型的表,现在我想使用 Query 检索值并始终使用 2 个小数位格式化浮点字段,到目前为止,我已经编写了类似这样的查询:

SELECT ROUND(floatField,2) AS field FROM table

这会返回如下结果集:

3.56
----
2.4
----
4.78
----
3

我想将结果格式化为小数点后两位,所以:

3.56
----
2.40
----
4.78
----
3.00

是否可以直接从 SQL 查询中始终使用 2 位小数进行格式化?在 SQLite 中如何实现?

谢谢。

【问题讨论】:

  • 您找到解决方案了吗?

标签: sql sqlite


【解决方案1】:

您可以将printf 用作:

SELECT printf("%.2f", floatField) AS field FROM table;

例如:

sqlite> SELECT printf("%.2f", floatField) AS field FROM mytable;
3.56
2.40
4.78
3.00
sqlite>

【讨论】:

  • 仅适用于 SQLite 3.8.3 或更高版本(2014 年 2 月版)
  • 就像@swdev 所说,这个功能现在可以在许多Android 设备上使用,这可能会导致应用程序在不受支持的设备上崩溃。我通过经验发现了这一点,在没有最新更新的 GAlaxy SIII 上进行测试(这很常见,顺便说一句)。
  • 同样的问题,我需要支持一些旧设备,我不能使用 printf
  • 作为侧标,千位分隔符(仅支持逗号)不能与小数一起使用,仅适用于整数,格式为select printf ('%,d',4115.782) (sqlite.org/printf.html)
  • 可以添加前导零,例如最少 10 个符号长度select printf ('%010.2f',4115.782);
【解决方案2】:

由于 sqlite 在内部存储数字的方式,

你可能想要这样的东西

select case when substr(num,length(ROUND(floatField,2))-1,1) = "." then num || "0" else num end from table;

【讨论】:

  • 不行,数字也可以在10以上,所以我可以有100.4, 1290.7, ...
  • 指数符号也会使这个失败。
【解决方案3】:

在没有PRINTF 可用的旧版本SQLite 上,您可以使用ROUND

例如...

SELECT 
   ROUND(time_in_secs/1000.0/60.0, 2) || " mins" AS time,
   ROUND(thing_count/100.0, 2) || " %" AS percent
FROM
   blah

【讨论】:

  • 问题已经提到ROUND,这个答案并没有带来什么新东西。
猜你喜欢
  • 2023-03-05
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
  • 2022-12-07
  • 1970-01-01
  • 2011-01-01
相关资源
最近更新 更多