设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

123下一页
返回列表 发新帖
查看: 12685|回复: 23
打印 上一主题 下一主题

[基础应用] 既要四舍六入又要保留有效数字位数怎样设置

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2004-10-11 01:14:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大侠:因工作需要数据要求保留3位(或2位、4位)有效数字,且必须按4舍6入准则处理,如1.254    0.2515     1.225    1.22501     12300   保留3位有效数字且4舍6入分别为:  1.25     0.252     1.22     1.23    1.23E+04(或1.23× 10的四次方)  该用何函数,请各位高手帮忙啦!  谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2004-10-11 19:25:00 | 只看该作者
=IF(IF(IF(MIDB(A1,2,1)=".","小数","整数")="整数","整数",IF(MIDB(A1,2,1)=".","小数","整数")&INT(A1))="小数0",ROUND(A1,3),ROUND(A1,2))

上面只能四舍五入且保留3位有效数字,对于整数的科学记数,不知道该如何设定条件格式。

您的1.225-----1.22, 1.22501-----1.23 如果保留3位有效数字和5舍6入,是不是有些问题啊?

[此贴子已经被作者于2004-10-11 11:35:51编辑过]

点击这里给我发消息

3#
 楼主| 发表于 2004-10-12 19:11:00 | 只看该作者
谢谢xulanghui大师的指点.  您的公式我试过了,非常好,基本可以使用.有几点尚不能达到要求. 1如果小数点前有两位数字就不好用了如12.234显示的还是12.23, 156.235显示的是156.23,好在我的数据很少超过个位数的. 2 没有显示出四舍六入的规则来.四舍六入逢到五是这样处理的:  5后面有数字的进位:如1.250001保留1位小数为1.3   如果5后面没有数据则要看5前面的数是双还是单  是单数则进位,是双数则舍去如:1.2500保留一位小数则为1.2    1.350 则为1.4     有效数字是另一个概念,  1.2500       1.350    12.350   保留3位有效数字:1.25     1.35     12.4(带四舍六入)  保留两位有效数字则成了1.2   1.4    12    如是大数  则要以指数方式:如12000保留两位有效数字则为:1.2E+4   保留3位有效数字则为:1.20E+3. 请大师按照这个规则再给设置一个公式,再次谢谢 !

点击这里给我发消息

4#
发表于 2004-10-13 00:46:00 | 只看该作者
您的要求确实比较复杂,很有挑战性。希望黄寅秋大师也看看,要求复杂但也符合逻辑。我估计 黄寅秋大师 有更妙的方法。

点击这里给我发消息

5#
 楼主| 发表于 2004-10-13 01:36:00 | 只看该作者
更正:3楼贴子中最后两个数据(12000保留两位及三位有效数字)应为:1.2E+04   1.20E+04     现予纠正,只是在数据较大时又要求保留有效数字位数才使用科学记数法。有效数字和四舍六入,是我们日常工作中数据处理的规范要求,以前都是算好了人工再处理一下,现在想在excel(及Accessvs  )中自动处理,所以请各位大师费心。
6#
发表于 2004-10-14 05:49:00 | 只看该作者
数据范围应该有限吧?先判断大小再分别处理呢

点击这里给我发消息

7#
 楼主| 发表于 2004-10-14 18:55:00 | 只看该作者
wewyhy大师 :数据范围有一个较宽的范围,根据工作遇到的,较小的数字可至小数后4 、5位,如0.02343 保留3位有效数字为0.0234     大数多在个位   十位  12.250  保留3位有效数字:12.2  如何分别处理,请指教!谢谢!
8#
发表于 2004-10-15 04:56:00 | 只看该作者
以下是引用wang1950317在2004-10-12 11:10:49的发言:



谢谢xulanghui大师的指点.  您的公式我试过了,非常好,基本可以使用.有几点尚不能达到要求. 1如果小数点前有两位数字就不好用了如12.234显示的还是12.23, 156.235显示的是156.23,好在我的数据很少超过个位数的. 2 没有显示出四舍六入的规则来.四舍六入逢到五是这样处理的:  5后面有数字的进位:如1.250001保留1位小数为1.3   如果5后面没有数据则要看5前面的数是双还是单  是单数则进位,是双数则舍去如:1.2500保留一位小数则为1.2    1.350 则为1.4     有效数字是另一个概念,  1.2500       1.350    12.350   保留3位有效数字:1.25     1.35     12.4(带四舍六入)  保留两位有效数字则成了1.2   1.4    12    如是大数  则要以指数方式:如12000保留两位有效数字则为:1.2E+4   保留3位有效数字则为:1.20E+3. 请大师按照这个规则再给设置一个公式,再次谢谢 !



比如

在程序里

大于等于10,又小于100的数字,先除以10,再用xulanghui的公式,然后乘以10;

大于等于100,又小于1000的数字,先除以100,再用xulanghui的公式,然后乘以100;

...........................................................

点击这里给我发消息

9#
 楼主| 发表于 2004-10-15 22:38:00 | 只看该作者
wewyhy 大师:您好,您说的有一定道理。但要把这些处理程序都柔和到xulanghui大侠地公式里成为一个公式 该如何做?请您帮忙!
10#
发表于 2004-10-20 00:11:00 | 只看该作者
这是一个很有趣的问题我写了一个东东,好像不很简单(有些函数可能我不太熟悉原原),不过可以达到效果Public Function tst(x, n As Integer)

Dim lns As Integer

Dim clns As Integer

Dim y, m

Dim aug As Integer

aug = 0

x = Val(x)

tst = IIf(x > 0, "+", "-")this:y = Abs(x)

lns = Len(Trim(Str(Int(y)))) - 1If y >= 1 Then

    y = y / (10 ^ lns)

    y = Int(y * (10 ^ (n - 1)) + 0.5) / (10 ^ (n - 1))

    clns = Len(Trim(Str(y))) - 1    Select Case aug

        

        Case 0

        

            If lns > 0 Then

               If clns >= n Then

                   tst = tst & Trim(Str(y)) & "E+" & Trim(Str(lns))

               Else

                   tst = tst & Trim(Str(y)) & String(n - clns, "0") & "E+" & Trim(Str(lns))

               End If

            Else

               If clns >= n Then

                   tst = tst & Trim(Str(y)) & "E+" & Trim(Str(lns))

               Else

                   tst = tst & Trim(Str(y)) & "." & String(n - clns, "0") & "E+" & Trim(Str(lns))

               End If

            End If

               

               Exit Function

               

         Case 1

             If lns > 0 Then

               If clns >= n Then

                   tst = tst & Trim(Str(y)) & "E-" & Trim(Str(m))

               Else

                   tst = tst & Trim(Str(y)) & String(n - clns, "0") & "E-" & Trim(Str(m))

               End If

            Else

               If clns >= n Then

                   tst = tst & Trim(Str(y)) & "E-" & Trim(Str(m))

               Else

                   tst = tst & Trim(Str(y)) & "." & String(n - clns, "0") & "E-" & Trim(Str(m))

               End If

             End If

               Exit Function

         End Select



ElseIf y > 0 Then

    lns = Len(Trim(Str(y)))

    For m = 1 To lns

        y = y * 10

        If y >= 1 Then

            x = y

            aug = 1

            Exit For

        End If

    Next m

    GoTo this

Else

    tst = 0

End IfEnd Function

见笑了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-29 20:58 , Processed in 0.089973 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表