Sql-Server
SQL Server 如何確定精度/比例?
我正在執行 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