2012-02-05 80 views
20

我在SQLite数据库中有一些包含FLOAT列类型的表,现在我想用Query来检索该值,并将浮点字段的格式设置为2位小数,到目前为止我有我写的查询像这样的:带有2位小数位的SQLite格式号总是

SELECT ROUND(floatField,2) AD field FROM table 

这返回一个结果类似以下内容:

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

我想保留两位小数始终格式化结果,所以:

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

是否可以直接从SQL查询中直接格式化为2位小数?它如何在SQLite中完成?

谢谢。

+0

你找到一个解决办法? – 2015-04-06 03:51:13

回答

0

由于内部的方式sqlite的门店数量,

你可能想是这样的

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

不起作用,数字也可能超过10,所以我可以有100.4,1290.7,... – aleroot 2012-02-05 12:57:33

+0

指数表示法也会导致失败。 – swdev 2014-05-12 23:26:59

-1

你可以尝试选择STR(12345.6789,12,3)

显示:“12345.679 '(3个空格,5个数字12345,一个小数点和三个小数位(679) - 如果必须截断,则循环(除非整数部分对于总大小而言太大,在这种情况下会显示星号)

总共12个字符,小数点右边3。

+1

不起作用。 SQLite没有STR()函数。 (SQLite!= SQL Server) – swdev 2014-05-12 23:25:21

37

您可以使用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> 
+11

只适用于SQLite 3.8.3或更高版本(2014年2月发布) – swdev 2014-05-12 23:12:56

+1

像@swdev声明的那样,此功能现在可用于许多Android设备,这可能会导致不支持的设备上的应用程序崩溃。我根据经验发现了这个问题,在没有最新更新的GAlaxy SIII上测试(这很常见,顺便说一下)。 – AlxDroidDev 2016-07-18 12:02:26

+0

同样的问题在这里,我需要支持一些旧设备,我不能使用printf – 2016-08-22 22:44:09