系统自带的计算器一样,如何获得高精度的计算结果?
模拟人工演算……
Text1 = 精确乘法("154879878712153562312312412312312312313", "123123129598560495834732872487234")
Text2 = 精确加法("154879878712153562312312412312312312313", "123123129598560495834732872487234")
结果:
19069295378885813917158304250971426423928469300045718253568630113512242
154880001835283160872808247045184799547
我把我写的加法的过程给你。。。
Function 精确加法(ByVal 加数 As String, ByVal 被加数 As String) As String
Dim a(), b(), c() As Byte '定义输入和输出数组
Dim 标题 As String
Dim 结果 As String
Dim 加数位数 As Integer, 被加数位数 As Integer, 结果位数 As Integer
标题 = "整数加法"
'加数 = InputBox("请输入被加数:", 标题)
'被加数 = InputBox("请输入加数", 标题)
If 加数 = Empty Then Exit Function
If 被加数 = Empty Then Exit Function
If Not IsNumeric(加数) Then MsgBox "被加数输入错误", , 标题 '检查输入的合法性
If Not IsNumeric(被加数) Then MsgBox "被加数输入错误", , 标题 '检查输入的合法性
加数位数 = Len(加数) '取加数的位数
被加数位数 = Len(被加数) '取被加数的位数
结果位数 = 加数位数 - 被加数位数
'确定结果的最大位数
Dim i As Integer, j As Integer, k As Integer
If 结果位数 >= 0 Then
结果位数 = 加数位数 + 1
ReDim a(加数位数), b(加数位数), c(结果位数) '重定义数组
For i = 被加数位数 + 1 To 加数位数
b(i) = 0
Next i
Else
结果位数 = 被加数位数 + 1
ReDim a(被加数位数), b(被加数位数), c(结果位数) '重定义数组
For i = 加数位数 + 1 To 被加数位数
a(i) = 0
Next i
End If
For i = 1 To 加数位数
a(i) = Mid(加数, 加数位数 - i + 1, 1) '给数组a的每一位赋值
Next i
For i = 1 To 被加数位数
b(i) = Mid(被加数, 被加数位数 - i + 1, 1) '给数组b的每一位赋值
Next i
For i = 1 To 结果位数 '结果数组c初始化
c(i) = 0
Next i
For i = 1 To 结果位数 - 1 '取a,b中的每一位
c(i) = c(i) + a(i) + b(i) '相加结果累加到c中的相应位
If c(i) >= 10 Then 'c中的每一位进位检查
c(i) = c(i) - 10 '本位处理
c(i + 1) = 1
End If
Next i
结果 = Empty
For k = 结果位数 To 1 Step - 1
If c(k) <> 0 Then Exit For '去掉结果中的前导0
Next k
k = IIf(k < 1, 1, k)
For i = k To 1 Step - 1
结果 = 结果 & c(i)
Next i
精确加法 = 结果
'结果 = 加数 & "*" + 被加数 + "=" & 结果
'标题 = "计算结果: " + CStr(加数位数) + "位 * " + CStr(被加数位数) + "位 结果为" + CStr(k) + "位"
'MsgBox 结果, , 标题 '算式和结果输出
End Function