В Access 2002 VBA какой тип данных можно использовать для ограничения точности двойного результата? - PullRequest
1 голос
/ 13 июня 2011

Я выполняю вычисление, в результате которого получается число с плавающей запятой.Когда я пытаюсь записать его в поле доступа, я получаю эту ошибку:

Run-time error '3759': Scaling of decimal value resulted in data truncation

Я намеренно ограничил поле доступа фиксированной точностью.Я надеялся, что значение будет автоматически усечено, но вместо этого оно выдает эту ошибку - как я могу явно изменить точность значения в VBA, чтобы избежать этой ошибки?

Код:

value = X / Y
With myTAble
    .AddNew
    !calc = value
    .Update
End With

Ответы [ 2 ]

3 голосов
/ 14 июня 2011

Вы можете попробовать использовать функцию Round в VBA, например:

!calc = Round(value, 2)

Замените 2 на любое количество десятичных разрядов, которое вы хотите.

В зависимости от масштаба и точности ваших чисел, вы все равно можете столкнуться с ошибкой 3759, если Round возвращает значение, которое не может быть точно выражено как двойное число с плавающей запятой (и в результате получается больше десятичных разрядов, чем вы просили) , Более надежный подход мог бы использовать что-то вроде:

!calc = CDec(FormatNumber(value, 2))

Замените 2 на любое количество десятичных разрядов, которое вы хотите.

FormatNumber округляет число и преобразует его в строку (с указанным вами числом только десятичных разрядов), а CDec преобразует строку в десятичное число.

1 голос
/ 13 июня 2011

Как насчет этого:

value = X / Y
With myTAble
    .AddNew
    !calc = Fix(value*10^decimalPlaces)/10^decimalPlaces
    .Update
End With

Где decimalPlaces - количество десятичных знаков, с которыми вы хотите работать.

Fix усекает число.Если вы хотите какое-то округление, попробуйте Clng.

...