设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
楼主: wuheng
打印 上一主题 下一主题

[表] 关于货币金额逐位显示的出错问题。LucasLynn,大侠快来看看

[复制链接]
11#
发表于 2005-12-24 23:19:00 | 只看该作者
以下是引用海狸先生在2005-12-24 15:09:00的发言:
Public Function GetBit(BitNo As Integer, value As Currency) As String
    If BitNo <= -Fix(-Log(value) / Log(10#)) Then
    GetBit = Int(CCur(value / 10 ^ BitNo)) Mod 10
     Else
       If BitNo = -Fix(-Log(value) / Log(10#)) + 1 Then
          GetBit = "¥"
       End If
    End If
End Function

高,+1与-1的变化
12#
发表于 2005-12-24 23:33:00 | 只看该作者
郁闷了

(-Log(1000) / Log(10#)) =-3

fix(-3)=-3

而 fix((-Log(1000) / Log(10#)) 却 =  -2
13#
发表于 2005-12-25 00:15:00 | 只看该作者
改变一下

Public Function GetBit(BitNo As Integer, value As Currency) As String
Dim intNo As Integer
intNo = -Log(value) / Log(10#)
    If BitNo <= - Fix(intNo) Then
    GetBit = Int(CCur(value / 10 ^ BitNo)) Mod 10
     Else
       If BitNo = - Fix(intNo) + 1 Then
          GetBit = "¥"
       End If
    End If
End Function

[此贴子已经被作者于2005-12-24 16:16:13编辑过]

14#
发表于 2005-12-25 00:31:00 | 只看该作者
这样某些数据前会加 0
15#
发表于 2005-12-25 00:50:00 | 只看该作者
呵呵,是有这个问题,一个个小小的错误 

Dim intNo As Integer

改成 Dim intNo As Currency
16#
发表于 2005-12-25 02:14:00 | 只看该作者
凑个热闹:

Public Function CHN(BigNo As String, IntNo As Integer)
    Const cnum = "零壹贰叁肆伍陆柒捌玖"
    CHN = ""
    sNum = Trim(BigNo * 100)
    For I = 1 To Len(sNum)
         CHN = CHN + Mid(cnum, Mid(sNum, I, 1) + 1, 1)
    Next I
    CHN = StrReverse(CHN) & "¥"
    For I = 1 To Len(CHN)
         If I = IntNo Then
         CHN = Mid(CHN, I, 1)
         End If
    Next I
    If IntNo >= I Then CHN = ""
End Function


调用方式,从分位起,依次为:CHN(金额, 1);CHN(金额, 2);CHN(金额, 3)..........直到最高位。结果是逐位显示中文大写数字。


17#
发表于 2005-12-25 03:08:00 | 只看该作者
个人认为16楼(楼上)的方法好,无金额时不会出现错误,如果将"零壹贰叁肆伍陆柒捌玖"改为"0123456789",还可以变成小写货币金额逐位显示

[此贴子已经被作者于2005-12-24 19:09:05编辑过]

18#
发表于 2005-12-25 06:52:00 | 只看该作者
转贴:数字在支票打印中分栏数字的函数

s-要分栏的数字
N 分栏为1 角为2 元为4 十为5....... 依次类推

Function Get_s(ByVal s As Variant, ByVal n As Variant) As Variant

Dim i As Variant

If s = 0 Then
  Exit Function
End If

i = Len(s)  ‘取数字长度

If i < 3 Then     ’没小数位,补2位小数
  s = s & ".00"
End If

If Right(Left(s, i - 1), 1) = "." Then  ‘只有一位小数 , 补齐2位
s = s & "0"
End If

i = Len(s)  ‘从新取补起小数位数字长度

If i = n - 1 Then     ’在分栏第一个碰到没数字的拦赋¥
  Get_s = "¥"
  Exit Function
End If

If i < n Then         ‘ 在没数字的拦位赋空值
  Get_s = ""
  Exit Function
End If

Get_s = Right(Left(s, i - n + 1), 1)  '取值

End Function
19#
发表于 2005-12-26 01:43:00 | 只看该作者
以下是引用海狸先生在2005-12-24 16:50:00的发言:


呵呵,是有这个问题,一个个小小的错误 

Dim intNo As Integer

改成 Dim intNo As Currency

如果:0.xx 有问题.   另外楼上的函数也有问题。
20#
 楼主| 发表于 2005-12-28 18:03:00 | 只看该作者
谢谢各位大侠:[em17]

   象0。XX那么小的数值,我想应该用少用到的吧?至少我不用,(呵呵)

不管怎么样,再次谢谢各位了

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

本版积分规则

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

GMT+8, 2024-5-16 12:06 , Processed in 0.102155 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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