在表达式中,没有四舍五入函数也就算了,贺老师说不太好加,就麻烦点用代码来实现吧!但我看到后面,在代码部分的 Round()函数竟然也不是四舍五入,好像是什么四舍六入五成双!可能我对编程了解有限,不太明白这样的四舍六入五成双函数有什么特殊的重大用途,但我只知道,在管理软件中或者日常计算中,无论在哪个编程工具或者电子表格软件中,四舍五入函数都是最常用也是最简单的函数之一,但不知道在FOX这样优秀、使用简便、功能强大的好软件中,竟然没有一个直接实现四舍五入的函数,还要编一个复杂的转换公式或者通过代码才能实现,这太让人不可理解了吧!
贺老师千万不要说开发FOX的开发工具中也没有四舍五入函数,不管是不是事实,我认为,FOX本身也是功能很强的开发工具,不管用什么开发的,都应想办法自定义一个这样的函数,我想这应该是没有技术难度的,所以不太明白为什么没有这样做!
[此贴子已经被作者于2008-9-5 13:55:25编辑过]
如何实现四舍五入
表达式并没有提供传统的四舍五入函数Round,我们只能用Convert函数来间接实现。
例如金额列原来的计算公式为:
[数量] * [单价] * (1 - [折扣])
为了保留两位小数,可以将公式改为:
Convert([数量] * [单价] * (1 - [折扣]) * 100, 'System.Int64') / 100
原理很简单:将计算结果乘以100,然后取整,最后除以100。
如果你要保留三位小数,将表达式中的100改为1000即可,其余类推。
呵呵,Math 类的 Round函数是.NET里面的。
以下是引用smileboy在2008-9-5 12:59:00的发言:
如何实现四舍五入
表达式并没有提供传统的四舍五入函数Round,我们只能用Convert函数来间接实现。
例如金额列原来的计算公式为:
[数量] * [单价] * (1 - [折扣])
为了保留两位小数,可以将公式改为:
Convert([数量] * [单价] * (1 - [折扣]) * 100, 'System.Int64') / 100
原理很简单:将计算结果乘以100,然后取整,最后除以100。
如果你要保留三位小数,将表达式中的100改为1000即可,其余类推。
这个我肯定知道,我的意思是,在别的软件中很简单的事情,为什么非要把它变得那么复杂呢?不就是四舍五入吧,有那么复杂吗?做一个这样的函数应该是没有太大问题的呀!
[此贴子已经被作者于2008-9-5 13:56:09编辑过]
以下是引用ylm在2008-9-5 13:35:00的发言:
四舍六入五成双是一种精确度的计数保留法.舍入规律是"四舍六入五成双",这里"四"是小于五的意思,"六"是大于五的意思,"五"是舍入位之后的尾数逢五的话看前一位,奇进偶不进,就像1.25,因为2是偶数,所以是1.2。又像1.35,因为3是奇数,所以是1.4,明不明白,这个是数据统计需要的.
从统计学的角度,"四舍六入五成双"比"四舍五入"要科学,它使舍入后的结果有的变大,有的变小,更平均.而不是像四舍五入那样逢五就入,导致结果偏向大数.
例如:1.15+1.25+1.35+1.45=5.2,若按四舍五入取一位小数计算
1.2+1.3+1.4+1.5=5.4
按"四舍六入五成双"计算,1.2+1.2+1.4+1.4=5.2,舍入后的结果更能反映实际结果
我认为做为一个开发工具,尤其像FOX这样作为普通大众用的开发工具和数据库软件,不能只看是不是科学是不是符合统计学的原理,而应该以大家的实际需要为主要目的,强烈建议在表达式中和代码中都改进或增加四舍五入函数!
希望不要因为一个小小的四舍五入函数给大家在使用中增加那么多麻烦!
[此贴子已经被作者于2008-9-5 13:57:17编辑过]
四舍六入五成双在统计学中是必需的,相对易表有了改进。不过四舍五入也是大众化的。“两全”则“齐美”了。