Преобразовать числовое значение с плавающей запятой в десятичную переменную (4gl, informix)
У нас есть таблица SQL с плавающей колонкой, хранящей значения в научной нотации. У меня есть значение -1.23E-256. когда я запускаю запрос и присваиваю результаты запроса переменным, я присваиваю это значение с плавающей запятой десятичной дробью (15,2). Но из-за этой научной нотации значения не привязываются к переменным в программе 4gl и выдают ошибки. Я попытался использовать функции convert и cast для изменения этой научной нотации на десятичную в запросах на выборку, но выбрасывает и выдает ошибку "значение очень маленькое, чтобы его можно было сохранить в десятичной форме". Я хочу получить эти переменные с плавающей точкой из базы данных в переменные в программе 4gl в десятичном формате. Как я могу этого достичь?
3 ответа
Не совсем. Вы должны преобразовать сначала в число с плавающей точкой, а затем в десятичное число или что-то еще:
select convert(decimal(15,2), convert(float, '-1.23E-256'))
преобразует в: 0.00
Поэтому, конечно, вы теряете значение, но, по крайней мере, оно не генерирует ошибку.
Десятичные [ (p[,s])] и числовые [ (p[,s])] Фиксированная точность и числовые значения. Когда используется максимальная точность, допустимые значения находятся в диапазоне от - 10^38 +1 до 10 ^ 38 - 1.
float - 1,79E+308 до -2,23E-308, 0 и 2,23E-308 до 1,79E+308
Так что это невозможно, потому что число мало, вы должны оставить его в плавающем
По словам Вольфрама Альфа значение
-1,23E-256 = -1,23×10^-256
Это означает, что вам придется сдвигать десятичную точку 256 раз. Вы пытаетесь вписать это число TINY в значение 2. Ваши десятичные разряды от 1 до 253 будут равны нулю.
Таким образом, @user2615302 является правильным, и вы должны держать его как плавающий