| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8321 人关注过本帖
标题:四舍六入逢五奇进偶不进,如何取整数
只看楼主 加入收藏
smy1860
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2010-11-3
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
四舍六入逢五奇进偶不进,如何取整数
Private Sub Command1_Click()
Dim a As Double
Dim b As String
a = 332.5
b = Rvt(a, 0)
Print b
End Sub

Function Rvt(ByVal x As Double, ByVal n As Integer) As String
'四舍六入逢五奇进偶不进的函数
   
    Dim sFmt As String
    Dim sRet1 As String, sRet2 As String
    Dim sTmp As String
    Dim intR As Integer

    If n < 0 Then n = 0       '位数必须是小数位数,不得小于 0
    sTmp = Str(x)               '转为 字符串
    intR = InStr(1, sTmp, ".")      '小数点位置
    intR = intR + n                 '具体保存的那一位
    sFmt = "0." & String(n, "0")    '生成掩模
        
'Format 包含 四舍五入功能,所以很多不需要处理.
'只需要处理 ,逢五奇进偶不进的情况,并且直接处理好数据来.
   If intR = Len(sTmp) - 1 Then     '仅处理 保留长度为 原数据长度+1 的数据
        sRet1 = Mid(sTmp, intR, 1)       '最后一后
        sRet2 = Mid(sTmp, intR + 1, 1)     '需要判断进位的
        If sRet2 = "5" Then             '后面那位 等于5,不等于5的,不需要处理
            If Val(sRet1) Mod 2 = 0 Then         '偶数
                x = Val(Left(sTmp, intR))         '取掉后面的数,因为 format 会造成进位
            End If
        End If
    End If
   
   Rvt = Format(x, sFmt)       '生成结果,
End Function

###############结果应为332,但此程序运行后是322.,多了个".",请问如果利用四舍六入五看奇偶不但能取小数,还能取整,(个人分析应该修改输出起始点,但是没改明白),请大家多帮助。


[ 本帖最后由 smy1860 于 2010-11-9 18:29 编辑 ]
搜索更多相关主题的帖子: 整数 
2010-11-09 18:25
smy1860
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2010-11-3
收藏
得分:0 
此问题试验数据为332.5,由于2是偶是所以奇进偶不进,如果数据为322.51则无论5后面有大于0的数就进位,无论前面是奇还是偶。

四舍六入的算法:要求取的有效数字的末一位的后一位数字小于等于4则舍,大于等于6则入,但对于等于5时可分成两种情况考虑:

(1)5后面的数字均为0时,应看“5”的前一位:若前一位数字此时为奇数,就应向前进一位;若前一位数字此时为偶数,则应将尾数舍去,数字“0”在此时应被视为偶数。

(2)5后面还有任何不是0的数字时,无论前一位在此时为奇数还是偶数,也无论“5”后面不为0的数字在哪一位上,都应向前进一位。
2010-11-09 18:29
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:20 
sFmt = "0." & String(n, "0")    '生成掩模

在这一句上面。
这句生成的 掩模是  0.????   (?代表0或者不存在)
这时面,没有考虑 N=0 情况,所以,当N=0时,
生成的是  0.
通过 FORMAT 后,就会变成 332.

修改的办法。
   if n>0 then                        '当N大于0时,生成带小数点的掩模
      sFmt = "0." & String(n, "0")    '生成掩模
   else                               '否则直接生成一个0 的掩模
      sFmt="0"
   end if

--------------
在WIN7中,没办法测试,只有靠你自己了。

授人于鱼,不如授人于渔
早已停用QQ了
2010-11-09 20:58
smy1860
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2010-11-3
收藏
得分:0 
谢谢老大
2010-11-10 20:30
快速回复:四舍六入逢五奇进偶不进,如何取整数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022923 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved