我想說,不用擔心轉換爲數字,無論如何,在四捨五入之後,任何轉換隻是格式化輸出,而格式化應該在表示層完成。
如果你真的想你的輸出具有相同的精度爲您挑選的圓形,然後只投給FLOAT
:
declare @aaa int = 3
select cast(round(sum(23.44324),@aaa) as float)
這將返回23.443
,這是一樣的鑄造numeric(36, 3)
反正。
附錄
正如已經指出在註釋上述方法不會增加後的0,所以36.400將縮短至36.4即使有3
雖然精度我不會寬恕這一點,並且仍然說格式應該在表示層完成,您可以創建一個函數來格式化您的號碼:
CREATE FUNCTION dbo.FormatNumber (@Input FLOAT, @Precision INT)
RETURNS VARCHAR(36)
AS
BEGIN
DECLARE @Output VARCHAR(36) = CAST(ROUND(@Input, @Precision) AS VARCHAR(36));
IF (CHARINDEX('.', @Output) > 0)
RETURN SUBSTRING(@Output + REPLICATE('0', @Precision), 1, CHARINDEX('.', @Output) + @Precision)
RETURN @Output + '.' + REPLICATE('0', @Precision);
END
Example on SQL Fiddle
您無法在SQL Server中參數化類型規範。 –
你應該接受最好的答案或者你發現最有用的答案 –
@Langthang你應該接受最好的答案或者你認爲最有用的答案(在你的其他檔案中) –