Estoy tratando de convertir 4503599627370495 en binario en Excel. DEC2BIN() devuelve #¡NUM! error porque DEC2BIN no puede manejar un número tan grande.

Alguna idea sobre cómo podría ser capaz de hacer que funcione?

En el caso general, no es fácil. En la hoja de cálculo, Excel almacena esta como 4503599627370490 (el último dígito se pierde). Usted puede guardarlo como texto, pero la conversión a BIN pone fea. Tushar Mehta tiene un gran página que entra en detalles de manejo de gran número de matemáticas en VBA.
dailydoseofexcel.com/archives/2005/12/02/decimal-to-binary
Ver esta respuesta: stackoverflow.com/a/24388218/2396122

OriginalEl autor user3367131 | 2014-03-01

5 Comentarios

  1. 6

    Gracias JustinDavies – que era justo lo que necesitaba, sino que entró en un bucle infinito si pasa una que ve la serie. Mi modificación:

    Function DecToBin(ByVal DecimalIn As Variant, Optional NumberOfBits As Variant) As String
      DecToBin = ""
      DecimalIn = CDec(DecimalIn)
      If DecimalIn < 0 Then
        DecToBin = "Error - Number negative"
        Exit Function
      End If
      Do While DecimalIn <> 0
        DecToBin = Trim$(Str$(DecimalIn - 2 * Int(DecimalIn / 2))) & DecToBin
        DecimalIn = Int(DecimalIn / 2)
      Loop
      If Not IsMissing(NumberOfBits) Then
        If Len(DecToBin) > NumberOfBits Then
          DecToBin = "Error - Number too large for bit size"
        Else
          DecToBin = Right$(String$(NumberOfBits, "0") & _
          DecToBin, NumberOfBits)
        End If
      End If
    End Function

    OriginalEl autor

  2. 4

    Ver VBA publicado aquí

    ' The DecimalIn argument is limited to 79228162514264337593543950245
    ' (approximately 96-bits) - large numerical values must be entered
    ' as a String value to prevent conversion to scientific notation. Then
    ' optional NumberOfBits allows you to zero-fill the front of smaller
    ' values in order to return values up to a desired bit level.
    Function DecToBin(ByVal DecimalIn As Variant, Optional NumberOfBits As Variant) As String
      DecToBin = ""
      DecimalIn = CDec(DecimalIn)
      Do While DecimalIn <> 0
        DecToBin = Trim$(Str$(DecimalIn - 2 * Int(DecimalIn / 2))) & DecToBin
        DecimalIn = Int(DecimalIn / 2)
      Loop
      If Not IsMissing(NumberOfBits) Then
        If Len(DecToBin) > NumberOfBits Then
          DecToBin = "Error - Number too large for bit size"
        Else
          DecToBin = Right$(String$(NumberOfBits, "0") & _
          DecToBin, NumberOfBits)
        End If
      End If
    End Function
    Nota: esta respuesta también se proporcionó en stackoverflow.com/questions/24387894/…

    OriginalEl autor

  3. 0

    Necesitaba una función VBA para Excel convertir a enteros decimales en binario ya que MS me ha fallado, una vez más. Se me ocurrió la siguiente, pero tenía que aceptar una cadena de unos & ceros como de salida, que estaba bien para mí. Se utiliza el logaritmo base 2, que puede ser singular (o no?) y funciona para todos los enteros positivos tal como es.

    Function Dec_Bin(dx As Integer) As String
        Dim x As Integer
        Dim y As Long
        Dim z As Integer
        Dim zz As Double
        Dim ch As String
        Dim str As String, s1 As String
        Dim lead As Boolean
    
        ch = String(15, "0")
    '    Stop
        zz = Log(dx) /Log(2)
        z = Fix(zz)
        y = dx - 2 ^ z
        z = 15 - z
        Mid(ch, z, 1) = "1"
        While y > 0
            zz = Log(y) /Log(2)
            z = Fix(zz)
            y = y - 2 ^ z
            z = 15 - z
            Mid(ch, z, 1) = "1"
            Wend
    
        ch = ch & "B"
        Dec_Bin = ch
    End Function
    

    OriginalEl autor

  4. 0

    Esta función se convierta tan grande como una cama Doble.
    Yo no lo intenté con valores negativos, aunque.

    Function cn(ByVal n As Double, ByVal s As Double)
      'n the number to convert
      's the numberic system to convert to.
      'This function can convert to binary all the way to the length of the
      'digits string and all in between.
    
      Dim x As Double  'The exponent without decimals
      Dim xx As Double 'The exponent with decimals, if any
      Dim r As String  'The return string
      Dim p As Integer 'Posistion of the digit in the return string
      Dim L As Long    'Length of the string return string
      Dim d            '(d+1) because mid() does not accept 0.
                       'The position of the digit in the digits string.
     Dim v As Double   'The numeric value of the position 
                       'of the digit in the return string
      Dim digits As String
      digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    Start:
    
      If n > 0 Then
         xx = Log(n) /Log(s)
         x = Int(xx)
      End If
      p = x + 1
      If r = "" Then
        r = String(p, "0")
        L = p
      End If
      v = s ^ x
      d = n \ v
      Mid(r, L - x, 1) = Mid(digits, d + 1, 1)
      n = n - (v * d)
      If n <> 0 Then GoTo Start
      cn = r
    End Function
    

    OriginalEl autor

Dejar respuesta

Please enter your comment!
Please enter your name here