高精度整数除法

Private Sub Command1_Click() Devide 123456789, 987654321, 2000 End Sub Sub Devide(ByVal X As Long, ByVal Y As Long, Optional ByVal Numdigitsafterdecimal As Integer = 100, Optional ByRef result As String) ‘x/y取小数点后Numdigitsafterdecimal 位(默认100) Dim a() As String, temp As Double, temp2 As Long, i As Integer ReDim a(Numdigitsafterdecimal) a(0) = X & “÷” & Y & “=” & Int(X / Y) & “.” temp = X - (X Y) * Y For i = 1 To Numdigitsafterdecimal temp = temp * 10 temp2 = Int(temp / Y) a(i) = Right(temp2, 1) temp = temp - Int(temp / Y) * Y Next result = Join(a, “”) Debug.Print result End Sub ...

2004年11月13日 · 1 分钟 · zgia

Sendkeys 和 Sendmessage 使用技巧一例

Private Declare Function SendMessage Lib “user32.dll” Alias “SendMessageA” (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function FindWindow Lib “user32.dll” Alias “FindWindowA” (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function FindWindowEx Lib “user32” Alias “FindWindowExA” (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Function sqrx(ByVal x As Double) As String ‘计算平方根(比VB DOUBLE 类型精度高) Dim temp As String, i As Long, j As Long Shell “Calc.EXE”, vbMinimizedNoFocus ‘运行计算器 temp = x & “y0.5=” For i = 1 To Len(temp) SendKeys Mid(temp, i, 1), True ‘向计算器顺序发送按键消息X (X^Y) 0.5= Next temp = String(64, Chr(0)) i = FindWindow(vbNullString, “计算器”) ‘窗口句柄 j = FindWindowEx(i, ByVal 0&, “Edit”, vbNullString) ‘编辑框句柄 SendMessage j, &HD, Len(temp), ByVal temp ‘发送编辑框文本至temp SendKeys “%{F4}”, True ‘调用ALT+F4关闭计算器窗口 sqrx = temp End Function ...

2004年11月13日 · 1 分钟 · zgia

关于天文数字十进制与十六进制间的转换

对于一般的整型数字,16进制与10进制 间的转化可以用CLNG(),HEX()函数解决,但遇上天文数字,这些函数就无能为力了。下面是笔者写的几个函数,演示了天文数字计算中的一些技巧。 ...

2004年11月13日 · 2 分钟 · zgia