2011-03-31 75 views
3

它足以使用round(value,2)四捨五入plsql中的列值。例如1.2222可以通過plsql中的該函數轉換爲1.22。四捨五入到SQL Server 2008中的兩位數

我怎麼能在SQL Server中做到這一點?當我使用round(1.2222,2)時,它轉換成1.2200。我想要1.22。感謝您的幫助

+0

可能重複[在SQL Server中舍入](http://stackoverflow.com/questions/4931050/rounding-off-in-sql-server) – codingbadger 2011-03-31 08:22:40

+0

使用CAST/CONVERT來精確到2的小數類型,這將會自動進行舍入 – RichardTheKiwi 2011-03-31 08:32:15

回答

5

數學上,1.2200和1.22是完全相同的數字。

數字的顯示實際上是一個與數字的物理內容不同的字符串,所以數字在SQL Server和Oracle中四捨五入,它只是顯示不同。

更多,約SQL浮點類型:如果你聲明一個變量爲具有小號小數,它會始終顯示爲有小號小數位,無論這個值,例如

declare @x decimal(10,6) 
declare @y decimal(10,2) 
set @x =3 
set @[email protected] -- identical to set @y=cast(@x as decimal(10,2)) 

select @x -- selects 3.000000 
select @y -- selects 3.00 

select 'The number is ' + cast(@x as varchar) -- selects 'The number is 3.000000' 
select 'The number is ' + cast(@y as varchar) -- selects 'The number is 3.00' 

然而,關於3.00和3.0000的含義有一個技術上的區別,那就是數字的相對誤差。由於所有實數都是四捨五入的,3.00實際上意味着3 +/- 0.005,而3.0000實際上是3 +/- 0.00005,因爲已知更多有效數字。

+0

所以如何改變它的顯示風格?我不想在我的報告中看到這些額外的零 – jhash 2011-03-31 08:28:27

+0

@jhash,編輯迴應顯示你可以做到這一點 – SWeko 2011-03-31 08:33:05

+0

@jhash:'cast(@x as decimal(10, 2))' - 這將只輸出2個小數位。如果您告訴我們您需要哪種格式(例如,總是小數點後兩位或所需的小數位數,......),那麼這可能會有所幫助。 – Heinzi 2011-03-31 08:33:41

0

十進制(10,4)和十進制(10,2)是兩種不同的類型。所以25.55和25.5555是不同的類型。但如果你使用float(4),那麼這兩個數字是相同的數據類型。