2
我有一个postgresql数据库,并将其用于处理货币值的项目。我的问题是: 如何限制postgresql表中Double Precision或float8类型列的小数位数为2?双精度限制十进制数字或postgesql中的float8类型
我有一个postgresql数据库,并将其用于处理货币值的项目。我的问题是: 如何限制postgresql表中Double Precision或float8类型列的小数位数为2?双精度限制十进制数字或postgesql中的float8类型
简单地使用Decimal
(Numeric
)类型代替documented in the manual,例如, cost decimal(10,2)
。
第一个数字(10)定义了总数为的长度为的数字(所有数字,包括小数点后的数字),而第二个数字(2)表示其中有多少个数字是小数点后的数字。上述声明给出了该点前面的8位数字。当然,你可以增加 - Numeric
类型的限制要高得多。
在我看来,当您处理货币或其他与货币有关的价值时,不需要使用浮点数。我不知道这两种类型之间的性能比较,但Decimal
有一个优点 - 它是一个确切的数字(通常不是浮点的情况)。我也建议阅读interesting, but short discussion on the topic。
我同意。 'float'(或'real')数据类型根本没有用处。 –
好的。另一个问题,我如何在liferay mvc的service.xml文件中声明小数数据类型?任何想法 ? – saurjk
据我所知,没有直接的解决办法。使用Java的'BigDecimal',[可以在Liferay LEP-841的评论中找到](http://issues.liferay.com/browse/LEP-841)的解决方法。这也是[在论坛讨论](http://www.liferay.com/community/forums//message_boards/message/11788130)。希望你能找到解决办法;如果不是 - 发表另一个问题,我相信有人已经做了类似的事情。 – Sorrow