day*_*mer 110 sql postgresql database-design
好像Money类型如所描述的不鼓励这里
我的应用程序需要存储货币,我应该使用哪种数据类型?数字,金钱还是FLOAT?
Erw*_*ter 99
你的消息来源绝不是正式的.它可以追溯到2011年,我甚至不承认作者.如果货币类型"气馁",PostgreSQL会在手册中这么说 - 但事实并非如此.
对于更官方的来源,请阅读pgsql-general中的这个帖子(从本周开始!),核心开发人员的声明,包括D'Arcy JM Cain(钱类型的原始作者)和Tom Lane:
基本上,money它有(有限)用途.优势numeric在于性能.
decimal只是numericPostgres 的别名.
有关最新版本改进的相关答案(和评论!):
就个人而言,我喜欢将货币存储为integer代表Cents.这比任何其他提到的选项更有效.
Chr*_*loe 77
强制2单位精度的数字.永远不要使用float或float这样的数据类型来表示货币,因为如果你这样做,当财务报告的底线数字不正确+或 - 几美元时,人们就会不高兴.
据我所知,资金类型只是因为历史原因而留下的.
Boh*_*ian 59
你的选择是:
integer:以美分存储金额.这是EFTPOS交易使用的.decimal(12,2):存储金额正好两位小数.这是大多数总帐软件使用的.float:糟糕的主意 - 准确性不足.这是天真的开发人员使用的.选项2是最常见且最容易使用的选项.使精度(在我的示例中为12,意思是总共12位数)尽可能大或小,最适合您.
请注意,如果您将作为计算结果的多个事务(例如涉及汇率)聚合为具有业务含义的单个值,则精度应该更高,以提供准确的宏值; 考虑使用类似的东西decimal(18, 8),总和是准确的,并且各个值可以四舍五入到精确度以便显示.
小智 20
我把所有的货币领域都保留为:
numeric(15,6)
拥有那么多小数位似乎太过分了,但是如果你有多少机会处理多种货币,那么转换就需要那么精确.无论我呈现的是什么用户,我总是以美元存储.这样,考虑到当天的转换率,我可以随时转换为任何其他货币.
如果你从不做任何东西,只有一种货币,最糟糕的是你浪费了一些空间来存储一些零.
Max*_*ges 13
使用BigInt存储的货币为代表的最小货币单位的货币价值正整数(如100美分存储$ 1.00 100存储¥100(日元,零小数的货币),这是条纹做什么-一个全球电子商务最重要的金融服务公司。
bigint我建议使用微型美元(或类似的主要货币)。微型意味着百万分之一,所以1个微型美元= 0.000001美元。
| 归档时间: |
|
| 查看次数: |
65029 次 |
| 最近记录: |