Драйвер ODP ADO.NET возвращает десятичное число с дополнительным нулем в строковом представлении - PullRequest
1 голос
/ 27 ноября 2009

Сегодняшняя проблема заключается в следующем: у нас есть таблица в базе данных Oracle. Таблица содержит поле типа Number (18, 3).

На поверхности как сохранение, так и загрузка данных с указанного поля работают отлично. Однако дальнейшая проверка показывает, что числа с тремя десятичными цифрами, например, 500.001 считываются из базы данных таким образом, что строковое представление десятичного числа имеет четвертую нулевую цифру (например, 500.0010). Похоже, это происходит, когда третья десятичная цифра отлична от нуля.

Для математических целей это не проблема. Тем не менее, у нас есть валидаторы, которые проверяют количество десятичных цифр в десятичном числе, преобразовывая его в строку, а затем подсчитывая количество десятичных цифр. Поскольку определенная часть данных имеет не более трех десятичных цифр, дополнительный ноль вызывает ошибку проверки.

Поскольку я не могу изменить валидаторы, мне остается задуматься, есть ли чистый способ получить десятичную дробь без дополнительного нуля, кроме преобразования числа в строку, обрезания конечных нулей и последующего повторного анализа Это? Или я должен делать что-то совсем другое?

Ответы [ 2 ]

2 голосов
/ 27 ноября 2009

Попробуйте это:

decimal trimmed = ((decimal)((int)(number * 1000))) / 1000

Приведение к int избавляет от дробной части. Вам не нужны все круглые скобки, но я думаю, что легче увидеть, что происходит, если порядок операций указан явно.

0 голосов
/ 21 января 2015

Я столкнулся с той же проблемой, но я использовал: number.ToString("F3")

...