2016-05-24 3 views
0

У меня есть столбец базы данных, определяемый как amount decimal (19, 9).Ошибка преобразования типа данных в числовое значение до десятичного

В интерфейсе это свободный текст, в котором пользователь может ввести значение, независимо пользователь вводит значение после того, что внутренне он получает умноженное на 1000.

Теперь, когда я пытаюсь сохранить его в базу данных, я получаю сообщение об ошибке

Ошибка преобразования типа данных числовой системы счисления в десятичную

Если я вошел значение, как 78654323, теперь внутренне он получает умноженное на тысячу

78654323 * 1000 = 78654323000 

и при сохранении я получаю эту ошибку. Зачем ?

Какую проверку/аннотацию данных следует разместить в текстовом поле для диапазона?

+0

поскольку значение десятичной (19, 9) означает десятизначные цифры и 9 знаков после запятой. 78654323000 превышает значение 9999999999.999999999 –

+0

ОК. Какую проверку следует положить в текстовое поле? – user662285

+1

использовать диапазон проверки и принимать значения только от 0 до 9999999. –

ответ

0

Ваша валидация должна быть как получение всего 19 цифр после умножения на 1000. Оно не должно пересекать 19 (всего до после десятичных) цифр. Для этого нужны некоторые расчетные работы. на основе результата мы должны предоставить подтверждение.

Для вашего результата, когда он поступит в базу данных, он будет сохранен как: 78654323000.00000000, который подходит для десятичной (20,9) не для десятичной (19,9). так что 1 разряд в десятичном разряде не должен быть после умножения.

1

Предполагая это для SQL Server (вы не сказали так - но это выглядит, как это):

Вы определили свой amount столбец быть типа decimal(19,9) в базе данных. Вы - , а не, получив 19 цифр до и 9 цифр после десятичной точки (что, по-видимому, кажется, что многие программисты считают это обозначение).

Что действительно означает:

  • вы получите общей из 19 цифр
  • от того, есть 9 цифр после запятой

и, таким образом, вам get 10 цифрдо десятичная точка.

При умножении введенную значение 78654323 на одну тысячу, вы в конечном итоге со значением 78654323000, который имеет 11 цифр (до десятичной точки), и, таким образом, вы не можете сейф это значение.

Вам необходимо увеличить количество доступных цифр до десятичной точки (используя, например, decimal(25,9), давая вам 16 цифр до десятичной точки).

Смежные вопросы