Драйвер ODP ADO.NET возвращает десятичное число с дополнительным нулем в строковом представлении

StackOverflow https://stackoverflow.com/questions/1807285

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top