2013-02-19 44 views
2
select round(849299099755.3,2) from dual; 

給人ROUND()得到安寧不正確的結果在SQL

849299099755.3 

我怎樣才能得到849299099755.30這裏???

+1

什麼[RDBMS](http://en.wikipedia.org/wiki/Relational_database_management_system)您使用的? 'SQL Server'? 'MySQL'? 'Oracle'? 'DB2'? – 2013-02-19 06:53:13

+0

我正在使用SQL服務器 – 2013-02-19 06:53:36

回答

3

的數據類型轉換到DECIMAL

SELECT CONVERT(DECIMAL(15,2), ROUND(849299099755.3,2)) 

SELECT STR(ROUND(849299099755.3,2), 20, 2) 
+0

這對我很好!然而,當我嘗試在ORACLE中執行相同的操作時,它給了我錯誤 - ORA-00936:缺少表達式,因爲小數在oracle中也受支持,錯誤的原因是什麼? – 2013-02-19 07:06:06

+0

不接受的原因是什麼?因爲我問你關於RDBMS的問題,你告訴我'SQL Server'。 – 2013-03-26 08:42:42

1

對於SQL Server

select convert(numeric(28,2),round(849299099755.3,2)) from dual; 
1

對於Oracle:

圓福nction返回一個NUMBER,並且round(849299099755.3,2)的確等於849299099755.3,所以它工作正常。但是,如果要顯示它,它將使用會話的默認數字格式設置。

要保留兩位小數格式化,您可以使用TO_CHAR功能,例如:

SELECT TO_CHAR(round(849299099755.3,2),'999999999990.00') FROM DUAL;