Foxtable(狐表)用户栏目专家坐堂 → [求助]数据计算问题代码


  共有6246人关注过本帖树形打印复制链接

主题:[求助]数据计算问题代码

帅哥哟,离线,有人找我吗?
hrw68529
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1142 积分:8846 威望:0 精华:0 注册:2012/7/10 9:09:00
  发帖心情 Post By:2014/5/7 10:46:00 [只看该作者]

有没有解决办法,还是round2函数设置有问题呢,老大们?

 回到顶部
帅哥哟,离线,有人找我吗?
hrw68529
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1142 积分:8846 威望:0 精华:0 注册:2012/7/10 9:09:00
  发帖心情 Post By:2014/5/7 11:06:00 [只看该作者]

foxtable四舍五入试验情况

     foxtable中的四舍五入函数round、round2,实际运用起来真的不好用,这两个函数都不能很好的完成对小数的四舍五入的功能!原因是采用的四舍六入五留双的这样原则,比如说:round(3.45,1)=3.4 ,round2(3.45,1)=3.5,但如果round2的计算为表达式,就不能四舍五入了。如:Output.Show(Round2(56.35 * 0.5 + 81.22*0.5,2)),计算出的数为:68.785,保留两位小数应为68.79,但在命令窗口中执行为68.78。                                                                                    

     既然这些函数都不能很好的处理好小数,可是我们需要计算一些小数的四舍五入怎么办呢?
         
经过反复试验,我发现了一个很强大的格式输入函数format(),用format()函数来四舍五入,尤其是对有计算表达式进行数据计算时,很管用。
    
反正到现在我没有发现用format()函数计算四舍五入有什么误差!
    
或许有一天你们会发现,如果发现了的话就告诉我吧!
   
格式:format(计算表达式,"0.00"),"0.00"表示保留两位小数,依此类推。

例子:e.DataRow("总成绩") = Format(e.DataRow("笔试成绩") * 0.5 + e.DataRow("面试成绩") * 0.5,"0.00")

[此贴子已经被作者于2014-5-7 11:09:56编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
hrw68529
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1142 积分:8846 威望:0 精华:0 注册:2012/7/10 9:09:00
  发帖心情 Post By:2014/5/7 11:08:00 [只看该作者]

请各位老师试验,如果可行,就给个赞,谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2014/5/7 11:11:00 [只看该作者]

以下是引用hrw68529在2014-5-7 11:08:00的发言:
请各位老师试验,如果可行,就给个赞,谢谢

就冲楼主的精神,赞!


 回到顶部
帅哥哟,离线,有人找我吗?
hrw68529
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1142 积分:8846 威望:0 精华:0 注册:2012/7/10 9:09:00
  发帖心情 Post By:2014/5/7 11:17:00 [只看该作者]

也是逼的没办法,我需要四舍五入的精确数据,这也涉及到考生能不能入围,就因为一个0.01的误差,把考生给刷下来,于心不忍,谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/7 11:17:00 [只看该作者]

 表达式同样可以四舍五入。double类型进行运算是可能丢失精度。

 

 你试试 Round2(Round2(e.DataRow("笔试成绩") * 0.5 + e.DataRow("面试成绩") * 0.5, 6), 2)

 

 实在不行,你可以做一个简单的例子说明。


 回到顶部
帅哥哟,离线,有人找我吗?
hrw68529
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1142 积分:8846 威望:0 精华:0 注册:2012/7/10 9:09:00
  发帖心情 Post By:2014/5/7 11:20:00 [只看该作者]

那么format,用它计算会不会有误差?如果没有误差,用它方便,

 回到顶部
帅哥哟,离线,有人找我吗?
hrw68529
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1142 积分:8846 威望:0 精华:0 注册:2012/7/10 9:09:00
  发帖心情 Post By:2014/5/7 11:25:00 [只看该作者]

Output.Show(Round2(Round2(56.35 * 0.5 + 81.22 * 0.5, 6), 2)),计算出来的还是68.78,不是68.79

 回到顶部
帅哥哟,离线,有人找我吗?
hrw68529
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1142 积分:8846 威望:0 精华:0 注册:2012/7/10 9:09:00
  发帖心情 Post By:2014/5/7 11:31:00 [只看该作者]


Output.Show(Round2(Round2(56.35 * 0.5,2) + round2(81.22 * 0.5, 2), 2)),这样计算的时候才是68.79,但也太麻烦了,如果format可行,用它就方便多了。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  20楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/7 11:34:00 [只看该作者]

 测试了一下,round2有点问题。output.show(round2(68.785,2))

 

 你直接用fomat吧,用Math.Round也可以,Math.Round就需要+0.00001


 回到顶部
总数 21 上一页 1 2 3 下一页