2016-05-16 86 views
0

我想一圓值選擇的SQL Server輪()

例如:

select width from Home 

width的結果是 「3.999999999999999」

我想成爲 「3.99」 或「3.9」

+0

如果你想要3.99或3.9,那麼你不需要'round()'。 –

回答

2

如果你只需要兩個十進制值,你可以乘以100,地板100結果和分(這是必要的,因爲地板只能地板的一些整數):

select floor(width * 100)/100 from Home 

這裏有步驟

3.99999999 * 100 = 399.999999 --- Multiply by 100 
floor(399.999999) = 399   --- floor 
399/100 = 3.99     --- Divide by 100 

它使用不同形式的round function with a third parameter也是可能的。

當第三個參數是從0不同的結果被截斷,而不是圓形

語法

ROUND (numeric_expression , length [ ,function ])

參數

numeric_expression是的表達確切的數字或 近似數字數據類型類別,位數據類型除外。

length是要將numeric_expression四捨五入的精度。 長度必須是tinyint,smallint或int類型的表達式。當 長度爲正數時,numeric_expression將四捨五入爲由長度指定的小數位數 。當長度爲 負數時,numeric_expression在 小數點的左側進行四捨五入,如長度所指定。

function是 操作要執行的類型。函數必須是tinyint,smallint或int。當 函數被省略或值爲0(默認值)時,numeric_expression 被四捨五入。 當指定0以外的值時,將截斷數值表達式

下面是選擇使用的round這個版本:

select round(width, 2, 1) from Home 
+0

相同的答案,更好的介紹:) –

3

如果你想要3.99或3.9的值,那麼你不想要round()。你想要floor()。但是,這對整數有效,但不是小數。

cast(width as decimal(10,2))的天真方法將返回4.00,如將round(width, 2)。一種方法是減去一小部分。所以:

select cast(width - 0.005 as decimal(10, 2)) 

應該給你「3.99」。

+0

這只是一個示例,我應該如何處理數據範圍? – ara

4

ROUND(width, 1 or 2, 1)應該工作最適合你。例如:

SELECT CONVERT(NUMERIC(13,2), ROUND(width, 2, 1)) 
FROM Home 

將返回3.99,和

SELECT CONVERT(NUMERIC(13,1), ROUND(width, 1, 1)) 
FROM Home 

將返回3.9

+0

謝謝,但爲什麼你使用「13」 – ara

+0

你可以根據你的架構來改變它。檢查您的列「寬度」的類型。如果它是Numeric(x,y),那麼你的代碼應該適用於NUMERIC(x,1或2)。我認爲它是NUMERIC(13,y)。 –

1

這是相當簡單的,如果你想要的結果3.9,然後

select round(width,1) from Home 

如果您需要結果3.99然後用..

select round(width,2) from Home