以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请教,表达式四舍五入的问题?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=44876)

--  作者:ericsky
--  发布时间:2014/1/10 20:14:00
--  请教,表达式四舍五入的问题?
如:Convert(698236.5,\'System.Int64\') = 698236,而不是698237?
这很奇怪,请教要如何设置?
谢谢!!

--  作者:有点甜
--  发布时间:2014/1/10 20:20:00
--  
  可以这样写

Convert(698236.5 + 0.1 ,\'System.Int64\')
[此贴子已经被作者于2014-1-10 21:02:41编辑过]

--  作者:有点甜
--  发布时间:2014/1/10 20:21:00
--  
 或者参考


--  作者:ericsky
--  发布时间:2014/1/10 20:29:00
--  
可是:
Convert(698236.6,\'System.Int64\') 又可以等于698237。
不知道怎么回事,头大了!

再测试下,Convert(698015.5,\'System.Int64\') 却又 = 698016

上面的帮助说明,是指取两位小数点的四舍五入,不知道直接取整数如何四舍五入?
谢甜老师帮我!
[此贴子已经被作者于2014-1-10 20:33:15编辑过]

--  作者:yinyb36
--  发布时间:2014/1/10 20:53:00
--  
这是四舍六入五留双
--  作者:有点甜
--  发布时间:2014/1/10 21:03:00
--  
 好像不行的样子!
[此贴子已经被作者于2014-1-10 21:04:24编辑过]

--  作者:有点甜
--  发布时间:2014/1/10 21:14:00
--  
 试了一下,可以用表达式做,根据5楼的规则,但要写很长一段表达式。建议直接用代码实现表达式的内容。


--  作者:ericsky
--  发布时间:2014/1/10 21:54:00
--  
哎,好多的数值计算都应用了表达式,就是想用表达式的优势,这下都要改了!
我自己在琢磨看看。
谢甜老师,让您费心了!

--  作者:ericsky
--  发布时间:2014/1/10 23:01:00
--  
终于找到答案了,把相关的计算列数据类型改为双精度小数,然后:
Convert(["xx] * ["xx"} + 0.000001,\'System.Int64\') 
就可以了

下面的内容是狐爸 2011年回帖的内容:

四舍六入五成双是一种精确度的计数保留法.这里"四"是小于五的意思,"六"是大于五的意思,"五"是舍入位之后的尾数逢五的话看前一位,奇进偶不进。如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,舍入后的结果更能反映实际结果。

如果这些东西能写进帮助,不是更好?


--  作者:包头123
--  发布时间:2014/1/11 18:29:00
--  
搞的这么复杂啊。