php - 如何将十进制格式转换为数字格式
问题描述
当我将此二进制转换为十进制时:
010000010110110001101001001000000100000101101000011011010110010101100100001000000100111101110011011011010110000101101110001000000110001001101001011100100111010001101000011001000110000101110100011001010011101000110001001011010011001100101101001100010011100100111000001101110010000001100011011011110111010101101110011101000111001001111001001110100111001101110101011001000110000101101110
使用 VB.Net,我得到这个双数:1.00695950340148E+115
.
我需要将其格式化为正常数字,如下所示:
10069595034014783469636931351646363690636553221072125712116008033168565762469882090200055592025448896479090348155246
如何使用 PHP 或 VB.Net 做到这一点?
Public Class Test
Public Shared Sub Main()
Dim Bin as String = "010000010110110001101001001000000100000101101000011011010110010101100100001000000100111101110011011011010110000101101110001000000110001001101001011100100111010001101000011001000110000101110100011001010011101000110001001011010011001100101101001100010011100100111000001101110010000001100011011011110111010101101110011101000111001001111001001110100111001101110101011001000110000101101110"
Dim dec As Double = Nothing
Dim length As Integer = Len(Bin)
Dim temp As Integer = Nothing
Dim x As Integer = Nothing
For x = 1 To length
temp = Val(Mid(Bin, length, 1))
length = length - 1
If temp <> "0" Then
dec += (2 ^ (x - 1))
End If
Next
System.Console.WriteLine("Sum of x and y = " & dec)
End Sub
End Class
输出是:
Visual Basic.Net 编译器版本 0.0.0.5943 (Mono 4.7 - tarball)
版权所有 (C) 2004-2010 Rolf Bjarne Kvinge。版权所有。
程序集 'jdoodle, Version=0.0, Culture=neutral, PublicKeyToken=null' 成功保存到 '/home/jdoodle.exe'。编译成功
编译耗时 00:00:01.1970230
x 和 y 之和 = 1.00695950340148E+115
解决方案
请尝试我的这个方法,但我还没有验证它是否正确:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim myBin = "110101010100001111101010101010101000000110110101100000010111110101010100001111101010101010101000000110110101100000010111110101010100001111101010101010101000000110110101100000010111110101010100001111101010101010101000000110110101100000010111110101010100001111101010101010101000000110110101100000010111110101010100001111101010101010101000000110110101100000010111110101010100001111101010101010101000000110110101100000010111110101010100001111101010101010101000000110110101100000010111110101010100001111101010101010101000000110110101100000010111110101010100001111101010101010101000000110110101100000010111110101010100001111101010101010101000000110110101100000010111110101010100001111101010101010101000000110110101100000010111110101010100001111101010101010101000000110110101100000010111110101010100001111101010101010101000000110110101100000010111110101010100001111101010101010101000000110110101100000010111110101010100001111101010101010101000000110110101100000010111110101010100001111101010101010101000000110110101100000010111110101010100001111101010101010101000000110110101100000010111110101010100001111101010101010101000000110110101100000010111110101010100001111101010101010101000000110110101100000010111110101010100001111101010101010101000000110110101100000010111110101010100001111101010101010101000000110110101100000010111110101010100001111101010101010101000000110110101100000010111110101010100001111101010101010101000000110110101100000010111"
Debug.Print(ConvBinToDec(myBin))
End Sub
Function ConvBinToDec(ByVal theVal As String)
ConvBinToDec = ""
Dim BinVal(Len(theVal)) As String
BinVal(1) = "1"
Dim Total = "0"
If Mid(theVal, Len(theVal), 1) = "1" Then Total = "1"
Dim myLast As String = ""
For a = 2 To Len(theVal)
BinVal(a) = Multi(BinVal(a - 1))
myLast = BinVal(a)
If Mid(theVal, Len(theVal) - a + 1, 1) = "1" Then
Total = Adding(Total, myLast)
End If
Next
ConvBinToDec = Total
End Function
Function Multi(ByVal TheVal As String) As String
Dim simpan As Byte = 0
Multi = ""
Dim myLen As Byte = 10
Dim myTimes = -Int(-Len(TheVal) / myLen)
For a = 1 To myTimes
Dim myStr As String = Strings.Right(TheVal, a * myLen)
Dim myRemain As String = Strings.Left(myStr, Len(myStr) - (a - 1) * myLen)
Multi = Strings.Right("0000000000" & CLng(myRemain) * 2 + simpan, myLen) & Multi
If Len(CStr(CLng(myRemain) * 2 + simpan)) > myLen Then simpan = 1 Else simpan = 0
If a = myTimes And simpan = 1 Then Multi = "1" & Multi
Next
End Function
Function Adding(ByVal TheVal1 As String, ByVal TheVal2 As String) As String
Dim simpan As Byte = 0
Adding = ""
Dim myLen As Byte = 10
Dim myTimes = -Int(-Len(TheVal2) / myLen)
TheVal1 = Strings.Right("00000000000" & TheVal1, Len(TheVal2))
For a = 1 To myTimes
Dim myStr1 As String = Strings.Right(TheVal1, a * myLen)
Dim myStr2 As String = Strings.Right(TheVal2, a * myLen)
Dim myRemain1 As String = Strings.Left(myStr1, Len(myStr1) - (a - 1) * myLen)
Dim myRemain2 As String = Strings.Left(myStr2, Len(myStr2) - (a - 1) * myLen)
Adding = Strings.Right("0000000000" & CLng(myRemain1) + CLng(myRemain2) + simpan, myLen) & Adding
If Len(CStr(CLng(myRemain1) + CLng(myRemain2) + simpan)) > myLen Then simpan = 1 Else simpan = 0
If a = myTimes And simpan = 1 Then Adding = "1" & Adding
Next
End Function
当我尝试使用你的二进制文件时,
"010000010110110001101001001000000100000101101000011011010110010101100100001000000100111101110011011011010110000101101110001000000110001001101001011100100111010001101000011001000110000101110100011001010011101000110001001011010011001100101101001100010011100100111000001101110010000001100011011011110111010101101110011101000111001001111001001110100111001101110101011001000110000101101110"
结果是:
"000010069595034014783469636931351646363690636553221072125712116008033168565762469882090200055592025448896479090348155246"
推荐阅读
- react-native - react-navigation 3 在嵌套堆栈中重置
- java - N-Queens 不打印所有解决方案
- sql-server - 自动生成的外键数据库
- c - C 语言:Switch case 奇怪的例子不以“;”结尾 也不“断”
- java - 如何从任何“file.txt”或“file.json”中轻松提取 JSONObject?[假设文件已经在系统中]
- c# - 与模板进行多重绑定时,WPF 标签为空
- shell - 使用 sed 通过仅引用字符串的开头来替换部分字符串
- angular - Angular中的Maven构建失败
- r - 在 R 的图例中显示符号和非符号
- reactjs - “成功”的 Netlify 表单提交未显示在仪表板中