Office中国论坛/Access中国论坛

标题: [求助] 关于货币金额逐位显示的问题 [打印本页]

作者: wuheng    时间: 2005-10-12 19:04
标题: [求助] 关于货币金额逐位显示的问题
[attach]13593[/attach]

各位大侠:

如何才能把数字分开放入个、十、百、千、、、格子中。

如123.45分别放在百为1,十为2,元为3,角为4,分为5。

请赐教!谢谢!

                                                                             wuheng敬上

[attach]13595[/attach]



[此贴子已经被LucasLynn于2005-10-12 11:51:22编辑过]


作者: LucasLynn    时间: 2005-10-12 19:48
    Dim Power As Integer

    Dim Value As Currency

   

    Value = 123.45

   

    For Power = -Int(-Log(Value) / Log(10#)) - 1 To -2 Step -1

        Debug.Print Int(CCur(Value / 10 ^ Power)) Mod 10

    Next Power





[此贴子已经被作者于2005-10-12 11:49:59编辑过]


作者: wuheng    时间: 2005-10-12 20:09
谢谢,请问这段代码应放在哪里?如果方便可不可以在我例子里改改?再次谢过!                                 wuheng敬上
作者: LucasLynn    时间: 2005-10-12 20:37
在你的程序中插入一个模块,模块代码如下:

Public Function GetBit(BitNo As Integer, Value As Currency) As String

    If BitNo <= -Int(-Log(Value) / Log(10#)) - 1 Then GetBit = Int(CCur(Value / 10 ^ BitNo)) Mod 10

End Function

在窗体上每个数字位置放一个文本框,数据源设定为:

=GetBit(0)

其中0表示个位,1表示十位,2表示百位,-1表示小数点后第一位,-2表示小数点后第二位……

另外说一句,如果工作中确实需要,学习一些VBA编程是必要的,至少要能够看懂别人写的程序,知道该如何用,在哪里用。

不需要每个窗体和报表模块都复制一段调用函数,只需要在一个模块中复制即可,只要把每个函数的声明改成Public就能在数据库任何一个地方调用。
作者: wuheng    时间: 2005-10-12 20:44
多谢谢指教,我这是半路出家的,不过我会努力的,再次谢谢你。我试数据库去了。                        wuheng敬上
作者: wuheng    时间: 2005-10-12 21:20
能力不行,我还是整不对呀。请再施援手,谢谢!                                          wuheng敬上
作者: sgrshh29    时间: 2005-10-13 01:25
每个金额位置放一个文本框,把文本框的数据源分别设为   =GetBit(n,[金额]),其中n表示从-2,-1,0.....开始到最高位数,依次从分、角、元...这样排上去。

不过总版主提供的那个函数可以放在通用模块里,也可以放在报表模块里。

[此贴子已经被作者于2005-10-12 17:28:34编辑过]


作者: wuheng    时间: 2005-10-13 18:15
谢谢各位,整出来了。                wuheng敬上
作者: LucasLynn    时间: 2005-10-13 18:32
以下是引用sgrshh29在2005-10-12 17:25:00的发言:



每个金额位置放一个文本框,把文本框的数据源分别设为   =GetBit(n,[金额]),其中n表示从-2,-1,0.....开始到最高位数,依次从分、角、元...这样排上去。

不过总版主提供的那个函数可以放在通用模块里,也可以放在报表模块里。





这段函数是可以这样,我建议他放入模块是针对他附件中的那个程序,看起来似乎他引用了他人的一段源码(几个函数),但是同样的代码他在3个窗体模块,2个报表模块中各复制了一份,一来没这个必要,二来这是很不良好的编程习惯。我想可能是因为源码中有一个Private的函数的原因。
作者: wuheng    时间: 2005-10-13 22:37
谢谢各位指导,在这里确实帮了我很多忙,学习引用这里的代码和库,提高了我的工作效率.例库里我确是引用了他人的一段源码,可以说如果没有论坛里各位大侠的指点和引用,我是做不出这东东的.有些代码和函数,我看有些时候明白有些时候不知所云.特别是模块这部份,我是更不知所云.所以就想笨的方法,一步一步试,(套).能试得出来最好,不行,就只有请各位大侠帮忙分析解决了.不过我会努力的.再次谢谢各位!!!    wuheng敬上[em01]
作者: wuheng    时间: 2005-10-15 20:22
接下来的问题:   想在金额栏那里随机加上人民币符号,如百位有数字,则在千位栏加¥,如千位有数字则在万位栏加,类推。要怎么做才能实现??请指教!                    谢谢!!                                                wuheng敬上                     
作者: LucasLynn    时间: 2005-10-15 22:23
以下是引用wuheng在2005-10-15 12:22:00的发言:

接下来的问题:

   想在金额栏那里随机加上人民币符号,如百位有数字,则在千位栏加¥,如千位有数字则在万位栏加,类推。要怎么做才能实现??请指教!

                    谢谢!!

                                                wuheng敬上

                     



Public Function GetBit(BitNo As Integer, Value As Currency) As String

    If BitNo <= -Int(-Log(Value) / Log(10#)) - 1 Then GetBit = Int(CCur(Value / 10 ^ BitNo)) Mod 10

    If BitNo = -Int(-Log(Value) / Log(10#))  Then GetBit = "¥"

End Function

[此贴子已经被作者于2005-10-15 14:23:40编辑过]


作者: zxh5983    时间: 2005-10-15 22:49
我怎么看不懂呢,但我还想在此提一问:“我也复制一段函数,但打印时在人民币符号前显0,怎么才能消除。”谢谢。
作者: wuheng    时间: 2005-10-15 23:17
  LucasLynn你太伟大了!!!感谢!!感谢!!                                             wuheng敬上[em17][em17]
作者: ey1001    时间: 2005-10-21 17:23
LucasLynn,你好,你的程序都觉得很独特。下面转换用通俗的说法其目的是什么呀 -Int(-Log(Value) / Log(10#)) - 1       Int(CCur(Value / 10 ^ BitNo)) Mod 10


作者: hzdzykf    时间: 2005-10-26 03:41


在你的程序中插入一个模块,模块代码如下:
Public Function GetBit(BitNo As Integer, Value As Currency) As String

    If BitNo <= -Int(-Log(Value) / Log(10#)) - 1 Then GetBit = Int(CCur(Value / 10 ^ BitNo)) Mod 10

End Function
在窗体上每个数字位置放一个文本框,数据源设定为:这个好像不行,当金额=98765432.13时,getbit(-2,金额)就会溢出,不知是什么原因?
作者: hzdzykf    时间: 2005-10-26 03:56
当金额=98765432.13时,GETBIT(-2,金额)就会溢出
作者: pccat    时间: 2005-10-27 15:56
是大写数额吗???
作者: LucasLynn    时间: 2005-10-27 22:42
以下是引用hzdzykf在2005-10-25 19:41:00的发言:













在你的程序中插入一个模块,模块代码如下:

Public Function GetBit(BitNo As Integer, Value As Currency) As String

    If BitNo <= -Int(-Log(Value) / Log(10#)) - 1 Then GetBit = Int(CCur(Value / 10 ^ BitNo)) Mod 10

End Function

在窗体上每个数字位置放一个文本框,数据源设定为:

这个好像不行,当金额=98765432.13时,getbit(-2,金额)就会溢出,不知是什么原因?



原因就是数额太大了,编写的时候没考虑你要开这么大额的发票。[em07]
作者: LucasLynn    时间: 2005-10-27 22:44
以下是引用ey1001在2005-10-21 9:23:00的发言:

LucasLynn,

你好,你的程序都觉得很独特。下面转换用通俗的说法其目的是什么呀

-Int(-Log(Value) / Log(10#)) - 1      

Int(CCur(Value / 10 ^ BitNo)) Mod 10



上面一行是获得小数点前的位数,以确定从哪一位开始返回数据,之前的就显示为空(否则会显示0),因为VBA中没有Log10函数,所以只能LogN/Log10,这是基本的对数计算公式。

下面一行是取单个位的数字。

[此贴子已经被作者于2005-10-27 14:45:03编辑过]






欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3