2017-01-30 107 views
0

當四捨五入,我發現了以下成果:四捨五入至小數點後4位 - 意外的結果

Math.Round(2.3234503,4) = 2.3235 

Math.Round(2.323450,4) = 2.3234 

我看不出這是有道理的,有人可以指出來給我嗎?我預計兩次都會有2.3235的回答。數字3或最後一位小數的缺失如何影響結果?

+0

我不相信這是,我知道默認是圓的,甚至不是從零捨去,但如果你在香港專業教育學院在這裏所示的例子再看看它表明因爲03的一個不同的問題 – user48408

+1

,你已經不是中途了。你略高於中途。 – SuperOli

+0

標記爲重複的問題在此處不相關。值「2.323450」不是*平行,所以無論是圓周到平頭還是從零開始都沒有使用。由於二進制浮點,OP的第二個例子中的值稍微接近於'2.3234'而不是'2.3235'。 (存儲的實際值是'2.323449999999999793232063893810845911502838134765625'。) –

回答

1

MSDN

返回:

最近到d包含小數位數 等於小數。

關鍵詞是最近的。

2.3234 503 - 最接近503是5,從而圓形至5

2.3234 50 - 是一半。

在半路上從MSDN

在中點值,在 最低顯著位後的結果值是兩個數字之間精確的一半。例如, 3.47500如果要舍入兩位小數,則是一箇中點值,如果要四捨五入到整數,則7.500是一箇中點值。在 這些情況下,最近的值不能很容易地確定沒有 四捨五入慣例。 Round方法支持兩個舍入處理中點值 約定:

從零

中點值四捨五入遠離被從零取整到下一個數字遠。對於 例如,3.75四捨五入爲3.8,3.85回合3.9,-3.75四捨五入爲-3.8, 和-3.85回合-3.9。舍入這種形式的由 MidpointRounding.AwayFromZero枚舉成員表示。四捨五入從 零是最廣爲人知的四捨五入形式。

四捨五入到最接近的或銀行家的舍入

中點值四捨五入爲最接近的甚至 號。例如,無論是3.75和3.85圓形至3.8,並且都-3.75 和-3.85一輪-3.8。舍入這種形式的由 MidpointRounding.ToEven枚舉成員表示。舍入到最接近的是 標準形式的舍入用於財務和統計 操作。它符合IEEE標準754,第4部分。當在多個舍入操作中使用 時,它減少了在一個方向上始終舍入中點值導致的舍入誤差,即 。 在某些情況下,該舍入誤差可能很重要。

默認情況下,Round方法使用舍入到最近的約定。

+0

OP是問爲什麼* halfpoint *數字向下而不是向上。這不是*最接近的*號碼。 .NET使用的是循環式,通常稱爲Banker's Rounding。這是IEEE 754標準 –

+0

@PanagiotisKanavos你是對的,回答改善 – BWA

+0

感謝您的意見。我的錯誤我相信如果你四捨五入地說出4個小數位,那麼你拿到了第5個數字並應用了打破規則。我不知道你拿走了所有剩餘的數字(即503),並且應用規則 – user48408