Я ищу способ использования десятичного типа данных на листе Excel. Я храню информацию о маршрутизации в виде числа. Маршруты могут состоять из 10 ходов в 50 разных местах. Это прекрасно работает в VBA с использованием десятичного типа данных, но я не могу заставить Excel принять эти числа, как только они будут переданы из VBA.

Кажется, по умолчанию для типа данных установлено значение Double, что недостаточно для точности моего приложения. Кроме того, строковое представление числа не будет достаточно, так как я отказываюсь от числа в листе.


Вот что у меня есть для генерации 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

1 ответ1

0

Числовой тип ячейки - это число с плавающей запятой двойной точности, способное содержать до 15 цифр точности.

Excel хранит числа по-разному, так что они могут быть отформатированы для отображения на листе. В нормальных условиях Excel сохраняет числовые значения как числа с плавающей запятой двойной точности или удваивает для краткости. Это 8-байтовые переменные, которые могут хранить числа с точностью до 15 десятичных знаков. На листе может быть только два десятичных знака, но базовое значение имеет полные 15 десятичных знаков.

Вторая проблема возникает из-за того, что компьютер, любой компьютер, не может хранить большинство дробных чисел с полной точностью. Компьютеры, как правило, используют стандарт IEEE (Институт инженеров по электротехнике и электронике) для чисел с плавающей запятой. Этот стандарт обеспечивает способ хранения дробных чисел в ограниченном пространстве 8-байтового числа. Конечно, для большинства чисел необходимо сделать некоторое приближение.

Округление и точность в Excel - CPearson

Кажется, вы пытаетесь держать больше точности, чем предназначено. Вы можете сохранить больше цифр, увеличив число, скажем, в 1x10 ^ 15 раз. Он будет хранить дополнительную информацию для вас, но он может не работать с вашей машиной.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .