项目中多半都需要 金额类型吧
decimal与money
这两个用哪个呢 ?
刚才网上查了下
decimal 比 money 可表示的数值 范围大
decimal 可以指定 小数位数
money 固定小数位数 4为
那么大家 通常用那种?
以前有个项目 用6位小数的
这个 。。。表示金额的时候 真的有必要这么多么 ?
我又有分了 上5个 ,,,,,多说几句啊
突然担心 我定义的 18,2的精度不够了,哈哈
真的有必要 要 4 位 6位么 ? 金额啊 ,,, 到那么小单位。。?
4位正常情况够用。我一般用MONEY。
6位较少需要。
2位的话也行。
别人的场景和你不同的,你觉得哪种好就哪种好了,又不会死的。
改类型也很快。
再说个真实笑话,电脑公司安装的ghost版Windows
制作GHOST的人认为,只需要使用Integer或者Decimal(18,0)就够了。
昨天一个朋友打电话问我,为啥同一张单据,一台电脑显示1.50
另外一台显示2.00。
我就给他鸡汤了一下GHOST版Windows和正常安装Windows的差别。
5个园豆你也来抢呀。。。
@XiaoFaye: 你说的比较好,建议题主把分给你。
@爱编程的大叔:
开个玩笑,莫见怪:)
@XiaoFaye: 这个不要这样吧
@爱编程的大叔: 出一分给他吧 ,,哈哈
4位 正常情况够用是个具体什么概念呢?
正常货币的话 是两位吧, 那么后面两位是为谁留的呢 ? 除法产生的小数位么?
@算了: 我以前做外贸的时候,我们的几千个商品里面,有这样的单价 $0.075,虽然这样的情况不多,
可是不能不处理吧。
然后有个朋友的材料仓库,我确实看到了四位小数,用户输入的。
所以4位基本够用,6位是为了防止千年虫(just a joke)。
还有注意,金额最好不要让系统四舍五入,建议由程序强行进行。
大概碰到这么几种需求
1、四舍五入 round(number, digit)
2、去掉尾数 floor(number, digit)
3、强行进位 ceiling(number, digit)
因为让系统进行四舍五入会碰到 诡异的合计不等于合计的问题。
@算了:
一般来说,最终结果会保留两位,但是中间结果一般不处理,能留多长就多长,不然经过多次运算后,最终结果误差会很大。
@XiaoFaye: 是的,这位也是有经验的。
货币类型要看是单价还是金额,金额除非很特殊的需求,一般都建议处理为两位,类型可以是4位,
但是要程序处理为两位。
单价比较多可能性出现超过2位的。
所以楼上说的还是有道理的,你不懂的时候,反正硬盘不值钱,多弄几位好了。
但是位数方面出的问题及相关处理你还是要多碰几次,才能深刻理解。
@XiaoFaye:
@爱编程的大叔:
两位大侠 的恢复内容值得细细品味,待我琢磨琢磨
@爱编程的大叔:
@XiaoFaye:
这两天理解了一下(其实刚看到 恢复内容的时候有些不想思考了 , 嘿嘿,头疼)
然后还是有些问题不是很明白
1:【一般来说,最终结果会保留两位,但是中间结果一般不处理,能留多长就多长,不然经过多次运算后,最终结果误差会很大。】
问题:这里的“不然经过多次运算后,最终结果误差会很大” 是因为什么导致的误差呢?因为四舍五入 ,向上取整 等操作导致的么?
还是说 将中间操作的结果持久化后, 中间结果的统计数据(比如合计)与原始数据的统计数据 之间有差异呢 ?
2:【金额最好不要让系统四舍五入,建议由程序强行进行】
问题:这里的“不要让系统四舍五入” 这里的系统指的是哪里呢?
哦 对了,两位大大说的 产生的误差,会不会是由于 所谓的银行算法(四舍六入五取偶)导致的呢?
@算了: 我也懒得再弄一个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中的合计金额。
@爱编程的大叔:
嗯 结果不等于
前面有点想歪了。。 呵呵 好的谢谢大叔了啊。。。。。╮(╯▽╰)╭ 自己太愚钝了
有必要的,精度大了可以四舍五入,但是小了你怎么处理误差呀?