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
在窗体上每个数字位置放一个文本框,数据源设定为:
其中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 |