2012-11-27 63 views
0

我正在計算一些值的平均值。一切正常。 我想要做的是將雙數舍入到小數點後第二位。舍入到某個小數位

例如

我會顯示爲 0.83

0.833333333333333333反正有沒有做到這一點?

+1

use string.Format – Zaki

+1

你想得到一個雙或字符串? – 888

回答

9

回合double本身喜歡:

Math.Round(0.83333, 2, MidpointRounding.AwayFromZero); 

(你應該定義MidpointRounding.AwayAwayFromZero才能得到正確的結果默認此函數使用銀行家四捨五入閱讀更多關於銀行家四捨五入:。http://www.xbeat.net/vbspeed/i_BankersRounding.htm所以你可以看到爲什麼這個不會給你正確的結果)

或只爲兩位小數的顯示值:

myDouble.ToString("F"); 

或供的#

myDouble.ToString("#.##") 
+1

默認值是MidPointRounding.ToEven。這與IEEE標準確認。因此它應該被單獨留下,即默認值。 –

+1

@MilindThakkar它取決於應用程序 - 我看到一家公司擁有自己的計費系統,需要針對不同的供應商提供不同的舍入方案。無論哪種舍入方法*都可以正確,但這是鄧肯知道並選擇的方法。 –

+0

它不是*顯示*值,並將在0.857失敗,將返回0.86和*不* 0.85按OP所要求的: – Tigran

1

數量確定的任何小數你說顯示爲 - 所以這將是:

var d = value.ToString("f2"); 

Standard numeric format strings

如果你真的要調整值降低到2dp,那麼你可以做@middelpat建議的。

1

使用

Math.Round(decimal d,int decimals); 

Math.Round(0.833333333,2); 

這會給你的結果0.83

+0

這並不總是正確的。看看銀行家的四捨五入:xbeat.net/vbspeed/i_BankersRounding.htm您應該指定第三個參數MidpointRounding.AwayFromZero – middelpat

+0

@middelpat:標準的方法是.ToEven,這符合IEEE標準。投票不是理由。 –

+0

我沒有downvote,只是添加了一條評論。 downvote是別人。 – middelpat

0
double d = 0.833333333333333333; 
Math.Round(d, 2).ToString(); 
+0

這並不總是正確的。看看銀行家的四捨五入:http://www.xbeat.net/vbspeed/i_BankersRounding.htm您應該指定第三個參數MidpointRounding.AwayFromZero – middelpat

+1

@middelpat:標準的方法是.toEven,這是按照IEEE標準是正確的。投票不是理由。 –

0

嘗試

decimalVar = 0.833333333333333333; 
decimalVar.ToString ("#.##"); 
-1

如果你想看到0.85781..0.85,最簡單的方法是通過100倍增,由100轉換爲int和鴻溝。

int val = (int)(0.833333333333333333 * 100); 
var result = val /100; 

它應該產生你正在尋找的結果。

+2

@dowvoter:原因? – Tigran