簡體   English   中英

圓形SQL Server

[英]Round SQL Server

我如何避免在SQL Server中舍入

DECLARE @NUMERO1 AS numeric(26,8) = 0
DECLARE @NUMERO2 AS numeric(26,8) = 0

SET @NUMERO1 = 1.92306964
SET @NUMERO2 = 105
SELECT 1.92306964 * @NUMERO2
SELECT @NUMERO1* @NUMERO2 

結果不一樣。

謝謝

如果要提高精度,請使用FLOAT而不是NUMERIC / DECIMAL類型。 請嘗試以下操作:

DECLARE @NUMERO1 AS FLOAT = 1.92306964
DECLARE @NUMERO2 AS FLOAT = 105
SELECT 1.92306964 * @NUMERO2 -- 201.9223122
SELECT @NUMERO1 * @NUMERO2  -- 201.9223122

當您在SSMS中對數字進行硬編碼時,它會被視為浮點數,而不是數字,其行為會有所不同。 為了使兩個選擇語句的輸出匹配,您需要編寫如下內容:

DECLARE @NUMERO1 AS numeric(26,8) = 0
DECLARE @NUMERO2 AS numeric(26,8) = 0

SET @NUMERO1 = 1.92306964
SET @NUMERO2 = 105
SELECT cast(1.92306964 as numeric(26,8)) * @NUMERO2
SELECT @NUMERO1* @NUMERO2

但是,我假設您想要更高的浮點精度,以便讓您像這樣反向運行:

DECLARE @NUMERO1 AS float = 0
DECLARE @NUMERO2 AS float = 0

SET @NUMERO1 = 1.92306964
SET @NUMERO2 = 105
SELECT 1.92306964 * @NUMERO2
SELECT @NUMERO1 * @NUMERO2 
SELECT (1.92306964 * @NUMERO2) / 1.92306964 -- returns @NUMERO2 as expected
SELECT (@NUMERO1 * @NUMERO2) / @NUMERO1 -- returns @NUMERO2 as expected

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM