原因不明的數字計算不相符 - IBM

文章推薦指數: 80 %
投票人數:10人

在計算中使用此數字時,可能會有捨入錯誤。

例如,Microsoft Excel 計算使用二進位數字(未捨入小數位數),但是報告中的格式會顯示捨入過的小數 ... 原因不明的數字計算不相符 您可能發現由於捨入錯誤而造成原因不明的數字計算不相符。

例如: 執行回歸測試後發現數字出現差異。

它們的不同之處僅僅是小數位數的捨入。

您選擇不在報告中顯示零,但零卻依然顯示出來,這是因為報告中有捨入為零的小數位數(例如,0.00000000000000426)。

捨入問題不是IBM®Cognos®軟體特有的問題。

進行捨入的環境中都有這個問題。

二進位捨入錯誤可能會由於二進位捨入錯誤而造成計算中的不相符。

例如,如果數字1.1代表二進位浮點數,而且您的報告格式包括很多小數位數,則數字1.1實際上可能會顯示為類似1.09999999999997。

如果您的報告格式化為只使用一位小數,則會進行小數捨入(補償二進位捨入)。

因此實際值為1.09999999999997的數字會顯示為1.1。

在計算中使用此數字時,可能會有捨入錯誤。

例如,MicrosoftExcel計算使用二進位數字(未捨入小數位數),但是報告中的格式會顯示捨入過的小數位數,這可能造成些微的不相符。

除法捨入錯誤無論數字如何表示,涉及除法的計算都通常會發生捨入錯誤。

這類計算的範例為「平均值」和「基數百分比」。

減少捨入影響的設計準則最佳解決方案就是變更基礎資料庫綱目或Cube模型,但這不可能一律可行。

另一個解決方案是透過在編寫報告和在IBMCognosFrameworkManager與外部OLAPCube中建立模型時遵循下列準則,讓捨入的影響降至最低: 儘量避免將資料儲存為浮點數格式。

特別是貨幣值更要如此,貨幣值應該儲存為固定小數點十進位數,或是具有小數位數值(例如2)的整數。

例如,在Cube中,2012年的「CampingEquipment收入」為$20,471,328.88。

如果收入明細儲存為浮點數,則計算收入時可能會發生捨入錯誤。

根據計算的順序,捨入錯誤可能稍有不同。

如果先計算「產品」的收入然後計算「時間」的收入,則可能得到與先計算「時間」然後計算「產品」不同的捨入錯誤。

總收入可能計算為前一個範例中所顯示的數字。

或者可能稍微不相符,例如為$20,471,328.8800001而不是$20,471,328.88。

內部數字可能與顯示的數字稍有不同。

視OLAP引擎使用報告進行計算的順序不同,即使執行相同報告,數字也可能會不同。

儘量避免在報告中使用除法。

必須使用除法時,要儘量在計算程序的後面部分使用。

例如,不使用Total([Revenue]/1000),而是使用Total([Revenue])/1000。

進行比較時,增加餘裕以允許進行捨入。

例如,您可能希望[Profit%]格式化為沒有小數的百分比的小數值。

但是,過濾器[Profit%]<>0(或[Profit%]NOTBETWEEN0and0)拒絕零值,並且可能傳回格式化後顯示為0%的值。

若要避免發生此情況,請使用下列兩種方式其中之一進行過濾: [Profit%]NOTBETWEEN-0.005and0.005 ([Profit%]0.005) 請注意,0.005相當於0.5%,視浮點精準度流失程度,會顯示為0%或1%。

在某些情況下,您可能偏好透過明確地捨入值來控制捨入錯誤。

例如,不使用[Profit%],而是使用round([Profit%],2)。

每次重新計算數字,而不是重複使用可能包含捨入小數的計算。

MicrosoftAnalysisServices2005/2008可能還有其他的考量,尤其是比較不同執行(如在LifecycleManager中進行的執行)的報告結果時。

如需相關資訊,請參閱Microsoft文件。

上層主題:計算資料時發生問題



請為這篇文章評分?