Sql-Server

SQL Server 如何確定精度/比例?

  • September 3, 2020

我正在執行 SQL Server 2012

SELECT 
  0.15 * 30 / 360,
  0.15 / 360 * 30 

結果:

0.012500, 
0.012480

這讓我更加困惑:

DECLARE @N INT = 360
DECLARE @I DECIMAL(38,26) = 0.15 * 30 / 360     
DECLARE @C DECIMAL(38,26) = 1000000     

SELECT @C *  @I *  POWER(1 + @I, @N)  / ( POWER(1 + @I, @N) - 1 )
SELECT @C * (@I *  POWER(1 + @I, @N)  / ( POWER(1 + @I, @N) - 1 ) )

第一個選擇給了我正確的結果:12644.44022 第二個截斷了結果:12644.00000

確定表達式產生的精度和比例是一個老鼠窩,我認為沒有人理解每種情況下的確切規則,尤其是在混合十進制(或浮點數!)和整數時。請參閱gbn 的這個答案

您當然可以通過進行更詳細的顯式轉換來定製表達式以提供您想要的內容。這可能是矯枉過正,但是:

SELECT 
  CONVERT(DECIMAL(15,6), CONVERT(DECIMAL(15,6), 0.15) 
  * CONVERT(DECIMAL(15,6), 30) 
  / CONVERT(DECIMAL(15,6), 360)),
  CONVERT(DECIMAL(15,6), CONVERT(DECIMAL(15,6), 0.15) 
  / CONVERT(DECIMAL(15,6), 360) 
  * CONVERT(DECIMAL(15,6), 30));

由於損壞的浮點數學或嚴重錯誤的精度/比例,這兩個結果都沒有被錯誤地舍入。

0.012500    0.012500

引用自:https://dba.stackexchange.com/questions/77664