2015-07-07 3 views
2

Есть ли способ указать, что тип данных double всегда будет иметь 2 точки после того, как десятичная точка, как обычно, имеет валюту (oracle db)?Добавление десятичной точки и нулей в Oracle

что:

100 will be converted to 100.00 
101.1 will be converted to 101.10 

Пробовал его отливки и установки точного масштаба, но не повезло с этим оно не добавить десятичную точку по умолчанию и нули

SELECT CAST((600.2) AS NUMERIC(28,2)) FROM DUAL; 

дает мне 600.2

+3

хранить их в виде чисел и использовать to_char) '' функцию (для форматирования вывода. 'to_char (num_col, 'fm990D00')'. Измените формат sting так, чтобы он соответствовал длине числа. [Пример] (http://sqlfiddle.com/#!4/9eecb7/4474) –

+1

Нельзя использовать приблизительный тип данных с плавающей точкой, такой как 'double' (который является' BINARY_DOUBLE' в Oracle). Вместо этого используйте точный тип, например 'NUMBER (10,2)'. Что касается десятичных знаков, вы уже получили свой ответ; 100 = 100,0 = 100,00 = 100 000 и т. Д., Т. Е. Сохраненное число всегда одно и то же. Если вам нужно определенное представление, используйте «to_char», чтобы показать номер в строке желаемого формата. –

ответ

1

Это просто форматирует вывод в вашем клиенте.

Например, в SQL * Plus установлен numformat:

SQL> set numformat 999.99 
SQL> SELECT CAST((600.2) AS NUMERIC(28,2)) FROM DUAL; 

CAST((600.2)ASNUMERIC(28,2)) 
---------------------------- 
         600.20 

Вы можете также использовать TO_CHAR, но использовать его только для отображения, для любого числа арифметических вы должны оставить номер, как это ,

SQL> select to_char(600.2, '000.00') from dual; 

TO_CHAR 
------- 
600.20 
2
SELECT to_char(101, '999.90') FROM DUAL; 
SELECT to_char(101.1, '999.90') FROM DUAL; 
Смежные вопросы