首页 新闻 会员 周边

sql server 金额类型的问题

0
悬赏园豆:5 [已解决问题] 解决于 2015-03-09 21:28

项目中多半都需要 金额类型吧

decimal与money

这两个用哪个呢 ? 

刚才网上查了下

decimal  比 money 可表示的数值 范围大

decimal  可以指定 小数位数

money 固定小数位数 4为

那么大家 通常用那种?

 

以前有个项目 用6位小数的

这个 。。。表示金额的时候 真的有必要这么多么 ?

 

我又有分了 上5个 ,,,,,多说几句啊   

 

突然担心 我定义的 18,2的精度不够了,哈哈

真的有必要 要 4 位 6位么 ? 金额啊  ,,, 到那么小单位。。?

 

 

算了的主页 算了 | 初学一级 | 园豆:3
提问于:2015-03-04 23:48
< >
分享
最佳答案
0

4位正常情况够用。我一般用MONEY。

6位较少需要。

2位的话也行。

别人的场景和你不同的,你觉得哪种好就哪种好了,又不会死的。

改类型也很快。

 

再说个真实笑话,电脑公司安装的ghost版Windows

制作GHOST的人认为,只需要使用Integer或者Decimal(18,0)就够了。

昨天一个朋友打电话问我,为啥同一张单据,一台电脑显示1.50

另外一台显示2.00。

我就给他鸡汤了一下GHOST版Windows和正常安装Windows的差别。

收获园豆:4
爱编程的大叔 | 高人七级 |园豆:30839 | 2015-03-05 08:45

5个园豆你也来抢呀。。。

XiaoFaye | 园豆:3087 (老鸟四级) | 2015-03-05 09:32

@XiaoFaye: 你说的比较好,建议题主把分给你。

爱编程的大叔 | 园豆:30839 (高人七级) | 2015-03-05 09:43

@爱编程的大叔: 

开个玩笑,莫见怪:)

XiaoFaye | 园豆:3087 (老鸟四级) | 2015-03-05 09:49

@XiaoFaye: 这个不要这样吧

算了 | 园豆:3 (初学一级) | 2015-03-05 09:50

@爱编程的大叔: 出一分给他吧 ,,哈哈 

4位 正常情况够用是个具体什么概念呢?

正常货币的话  是两位吧, 那么后面两位是为谁留的呢 ? 除法产生的小数位么?

算了 | 园豆:3 (初学一级) | 2015-03-05 09:53

@算了: 我以前做外贸的时候,我们的几千个商品里面,有这样的单价 $0.075,虽然这样的情况不多,

可是不能不处理吧。

然后有个朋友的材料仓库,我确实看到了四位小数,用户输入的。

 

所以4位基本够用,6位是为了防止千年虫(just a joke)。

还有注意,金额最好不要让系统四舍五入,建议由程序强行进行。

大概碰到这么几种需求

1、四舍五入  round(number, digit)

2、去掉尾数  floor(number, digit)

3、强行进位  ceiling(number, digit)

因为让系统进行四舍五入会碰到 诡异的合计不等于合计的问题。

爱编程的大叔 | 园豆:30839 (高人七级) | 2015-03-05 09:56

@算了: 

一般来说,最终结果会保留两位,但是中间结果一般不处理,能留多长就多长,不然经过多次运算后,最终结果误差会很大。

XiaoFaye | 园豆:3087 (老鸟四级) | 2015-03-05 09:57

@XiaoFaye: 是的,这位也是有经验的。

货币类型要看是单价还是金额,金额除非很特殊的需求,一般都建议处理为两位,类型可以是4位,

但是要程序处理为两位。

单价比较多可能性出现超过2位的。

 

所以楼上说的还是有道理的,你不懂的时候,反正硬盘不值钱,多弄几位好了。

但是位数方面出的问题及相关处理你还是要多碰几次,才能深刻理解。

爱编程的大叔 | 园豆:30839 (高人七级) | 2015-03-05 10:11

@XiaoFaye: 

@爱编程的大叔:

两位大侠 的恢复内容值得细细品味,待我琢磨琢磨

算了 | 园豆:3 (初学一级) | 2015-03-05 21:33

@爱编程的大叔: 

@XiaoFaye:

这两天理解了一下(其实刚看到 恢复内容的时候有些不想思考了 , 嘿嘿,头疼)

然后还是有些问题不是很明白

1:【一般来说,最终结果会保留两位,但是中间结果一般不处理,能留多长就多长,不然经过多次运算后,最终结果误差会很大。】

问题:这里的“不然经过多次运算后,最终结果误差会很大” 是因为什么导致的误差呢?因为四舍五入 ,向上取整 等操作导致的么?

  还是说 将中间操作的结果持久化后,  中间结果的统计数据(比如合计)与原始数据的统计数据 之间有差异呢 ?

2:【金额最好不要让系统四舍五入,建议由程序强行进行】

问题:这里的“不要让系统四舍五入” 这里的系统指的是哪里呢?

  哦 对了,两位大大说的 产生的误差,会不会是由于 所谓的银行算法(四舍六入五取偶)导致的呢?

算了 | 园豆:3 (初学一级) | 2015-03-08 23:09

@算了: 我也懒得再弄一个EXCEL样本给你,这样我说,你自己试验一下。

1、打开EXCEL,在A列输入10行数据,0.135, 1.386....这样,三位小数即可。

2、选择这10行,按下工具栏上的合计按钮。这样第11行应该是=sum(A1:A10)

3、选择A列,按下工具栏上的金额按钮,这样A列应该显示为0.14, 1.39.... 这样。

4、使用计算器,加一下前10行,看看是否等于你看到的第11行A11中的合计金额。

爱编程的大叔 | 园豆:30839 (高人七级) | 2015-03-09 12:00

@爱编程的大叔: 

嗯 结果不等于

前面有点想歪了。。 呵呵 好的谢谢大叔了啊。。。。。╮(╯▽╰)╭ 自己太愚钝了

算了 | 园豆:3 (初学一级) | 2015-03-09 21:28
其他回答(1)
0

有必要的,精度大了可以四舍五入,但是小了你怎么处理误差呀?

收获园豆:1
XiaoFaye | 园豆:3087 (老鸟四级) | 2015-03-05 08:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册