设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 1589|回复: 11
打印 上一主题 下一主题

[Access本身] 二舍八入 三七做五

[复制链接]
跳转到指定楼层
1#
发表于 2007-9-22 16:43:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
对一例数值(金额)A进行处理,当金额<=5元时,小数点保留到分,即3.4.5.6.7分都算5分。1,2分算舍去,8,9分进位算一角。
例:1.13     处理后为:1.15(一块一毛五);1.18   处理后为:   1.20(一块二)。
对一例数值(金额)A进行处理,当金额>5元时,采取四舍五入,保留到角
例:5.13     处理后为:5.1   ;                                 5.18   处理后为:   5.2
请问如何使用access中的sql实现?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2007-9-22 21:28:23 | 只看该作者
Public Function FixJiao(Mydata As Double) As Double
'================================================

'二舍八入 三七做五
'当金额<=5元时,小数点保留到分,即3.4.5.6.7分都算5分。1,2分算舍去,8,9分进位算一角。
'当金额>5元时,采取四舍五入,保留到角
'用法:Fixjiao(2.13)
' andymark
'==================================================
Dim IntFen As Integer
Dim IntJiao As Integer
Dim IntYuan As Integer

If Mydata > 5 Then
   FixJiao = RoundToLarger(Mydata, 1)
Else
   
IntYuan = Fix(Mydata)
IntJiao = Fix((Mydata - IntYuan) * 10)
IntFen = Round((Mydata - IntYuan - (IntJiao / 10)) * 100)

  Select Case IntFen
  
      Case 3, 4, 5, 6, 7
         FixJiao = IntYuan + (IntJiao + 0.5) / 10
      Case 8, 9
         FixJiao = IntYuan + (IntJiao + 1) / 10
       Case 0, 1, 2
          FixJiao = IntYuan + IntJiao / 10
  End Select
  
End If

End Function

Public Function RoundToLarger(dblInput As Double, intDecimals As Integer) As Double '四舍五入
    Dim strFormatString As String
    If dblInput <> 0 Then
        strFormatString = "#." & String(intDecimals, "#")
        RoundToLarger = Format(dblInput, strFormatString)
    Else
        RoundToLarger = 0
    End If
End Function

[ 本帖最后由 andymark 于 2007-9-22 21:29 编辑 ]
3#
 楼主| 发表于 2007-9-25 12:19:11 | 只看该作者

谢谢高手的解答

请问版主,如果我想用iif在access的sql中实现,应当如何是好???
4#
 楼主| 发表于 2007-9-25 12:22:20 | 只看该作者

用IIF写起来比较困难

希望尽快能够得到帮助,我写的语句好像不对,希望可以得到纠正
IIF(sqldj>5,ROUND(sqldj,1),IIF(cint(RIGHT(FORMAT(sqldj-0.005,'#.00'),1))<3,ROUND(sqldj,1),IIF(cint(RIGHT(FORMAT(sqldj-0.005,'#.00'),1))>8,ROUND(sqldj,1),ROUND(sqldj-0.05,1)+0.05)))
5#
 楼主| 发表于 2007-9-25 12:51:07 | 只看该作者

回复 2# 的帖子

三七作五 二舍八入
用IIF写起来比较困难,我想在access的sql里实现
希望尽快能够得到帮助,我写的语句好像不对,希望可以得到纠正
IIF(sqldj>5,ROUND(sqldj,1),IIF(cint(RIGHT(FORMAT(sqldj-0.005,'#.00'),1))<3,ROUND(sqldj,1),IIF(cint(RIGHT(FORMAT(sqldj-0.005,'#.00'),1))>8,ROUND(sqldj,1),ROUND(sqldj-0.05,1)+0.05)))
6#
发表于 2007-9-25 14:57:15 | 只看该作者
上面的太复杂了,就下面的一句足够

select 字段,5*INT(字段*100/5+0.4)/100 as 二舍八入三七做五 from 表

上面的查询列出了两个字段,一个是原值,一个是用来比较的值,你可以对比看一下对否.
7#
 楼主| 发表于 2007-9-25 15:02:19 | 只看该作者

回复 7# 的帖子

朋友,谢谢你的回答,你的这个方法好像行不通,我还是想通过IIF来实现
8#
发表于 2007-9-25 15:06:16 | 只看该作者
晕!结果不对吗?能给出你的例子吗?
9#
 楼主| 发表于 2007-9-25 15:19:03 | 只看该作者

回复 9# 的帖子

举例说明:
进价    销售价
1.376      1.4
4.429       4.45
1.669       1.7
0.608       0.6
2.483        2.5            总之,当金额<=5元时,小数点保留到分,即3.4.5.6.7分都算5分。1,2分算舍去,8,9分进位算一角。当金额>5元时,采取四舍五入,保留到角
10#
发表于 2007-9-25 15:27:42 | 只看该作者
我上面的查询除了没有考虑>5元外应该是正确的,因为我只考虑了"三七作五 二舍八入",你只要加上这个判断就行.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 01:23 , Processed in 0.089242 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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