Usando o tipo de dados Decimal na Planilha do Excel

0

Estou procurando uma maneira de usar o tipo de dados Decimal em uma planilha do Excel. Estou armazenando informações de roteamento como um número. Os roteiros podem consistir em 10 movimentos para 50 locais diferentes. Isso funciona bem no VBA usando o tipo de dados decimal, mas não consigo obter o Excel para aceitar esses números, uma vez que é passado do VBA.

Parece que o tipo de dados padrão é Double, que não possui precisão suficiente para o meu aplicativo. Além disso, uma representação de seqüência de caracteres de um número não será suficiente, pois estou fazendo o backup do número na planilha.

Aqui está o que eu tenho até agora para gerar o Route #:

'generate route# for each row
For i = intFirstRow To intLastRow
    'initiate route#
    decRoute = CDec(dblInitialRoute)
    For j = 1 To 7
        'only assign if labor
        If arrLabor(i, j, 1) <> 0 And arrLabor(i, j, 1) <> "" Then
            'some stations could lead to multiple machines
            If arrLabor(i, j, 2) = 1 Then
                sglRandom = Rnd()
                If sglRandom < 0.8 Then
                    intValue = 1
                Else
                    intValue = 3
                End If
                decRoute = decRoute + intValue * (50 ^ ((decRoute - Int(decRoute)) * 100)) - 0.01
            ElseIf arrLabor(i, j, 2) = 10 Then
                sglRandom = Rnd()
                intValue = Int((sglRandom * 1000) / (1000 / 20)) + 10
                Debug.Print intValue
                decRoute = decRoute + intValue * (50 ^ ((decRoute - Int(decRoute)) * 100)) - 0.01
            Else
                intValue = arrLabor(i, j, 2)
                decRoute = decRoute + intValue * (50 ^ ((decRoute - Int(decRoute)) * 100)) - 0.01
            End If
        End If
        'exception
        If arrLabor(i, j, 1) = "" And j = 2 Then
            intValue = 44
            decRoute = decRoute + intValue * (50 ^ ((decRoute - Int(decRoute)) * 100)) - 0.01
        End If
    Next
    'write route#
    Debug.Print CDec(Int(decRoute) + dblInitialRoute)
    wsActive.Cells(i, intRouteCol).Value = CDec(Int(decRoute) + dblInitialRoute)
Next
    
por Acumen Simulator 13.09.2016 / 19:02

1 resposta

0

O tipo numérico da célula é ponto flutuante de precisão dupla capaz de conter até 15 dígitos de precisão.

Excel stores numbers differently that you may have them formatted display on the worksheet. Under normal circumstances, Excel stores numeric values as "Double Precision Floating Point" numbers, or "Doubles" for short. These are 8-byte variables that can store numbers accurate to approximately 15 decimal places. You may have only two decimal places displayed on the worksheet, but the underlying value has the full 15 decimal places.

The second problem arises from the fact that a computer, any computer, cannot store most fractional numbers with total accuracy. Computers, in general, use the IEEE (Institute Of Electrical And Electronic Engineers) standard for floating point numbers. This standard provides a way to store fractional numbers in the limited space of an 8-byte number. Of course, for most numbers, some approximation must be made.

Arredondamento e precisão no Excel - CPearson

Parece que você está tentando manter mais precisão do que foi projetado. Você pode armazenar mais dígitos fazendo o número maior dizer um fator de 1x10 ^ 15. Ele armazenará as informações extras para você, mas pode não funcionar com a máquina que você possui.

    
por 14.09.2016 / 14:49