台灣最大程式設計社群網站
線上人數
781
 
會員總數:244386
討論主題:188627
歡迎您免費加入會員
討論區列表 >> C# >> C#沒有四捨五入?只有五捨六入的涵數?
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
C#沒有四捨五入?只有五捨六入的涵數?
價值 : 20 QP  點閱數:16543 回應數:16

樓主

JouMing
高級專家
7457 117
6569 2110
發送站內信

如題有四捨五入的涵數嗎?
本篇文章發表於2005-11-22 10:09
== 簽名檔 ==
字數限制:150字,會顯示在討論文章的最下方 *(修改後30分鐘內會顯示出來)
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
最有價值解答

Bryan(不來ㄣ)
捐贈 VP 給 Bryan(不來ㄣ) 檢舉此回應
自己可以寫
比如數字 N 要取到小數點2位:
1.先將N*100
2.加0.5 --> N*100+0.5
3.無條件捨去(N*100+0.5)的小數點
4.再除以100

如果要取到小數點1位,就把上面100的地方改為10
本篇文章回覆於2005-11-22 10:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
不錯的參考

Allen
捐贈 VP 給 Allen 檢舉此回應
Decimal.Round()
本篇文章回覆於2005-11-22 11:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
不錯的參考

QQ
檢舉此回應
用ToString()格式化
例:

本篇文章回覆於2005-11-22 13:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
不錯的參考

達可達
檢舉此回應
之前看書,看到書上寫四捨六入
還以為是書印錯,還用筆給它訂正
後來才知是四捨六入沒錯...
而遇到五則是是看前面位數是奇數還是偶數前面是奇數才進位,偶數就捨位
ex:
Console.WriteLine( Math.Round( 3.5 ) ); //奇數進位 4
Console.WriteLine( Math.Round( 4.5 ) ); //偶數捨位 4

Console.WriteLine( Decimal.Round( 3.5m, 0) ); // 同上 4
Console.WriteLine( Decimal.Round( 4.5m, 0) ); // 4

要四捨五入可能要自己寫程式 :)

本篇文章回覆於2005-11-22 16:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

QQ
檢舉此回應
To : 達可達
>>要四捨五入可能要自己寫程式 :)
我的答案(#3)有錯嗎?
我有試過的確是四捨五入耶
本篇文章回覆於2005-11-22 16:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

達可達
檢舉此回應
Try 了一下 ,才了解原來可以也...
ToString("0") 用 "#" 也可以...
好像都會四捨五入....
decimal double float 應該是在override ToString( IFormatProvider .. )
底層有寫程式轉換....
寫程式的方式應該是 #1 Bryan(不來ㄣ) 說的那種方法比較好一點...
ToString 去轉可能比較方便,不過把數值轉字串再轉數值 boxing unboxing ...
如果四捨五入後的結果是要再來計算的....用另一種方法可能會比較好一點...
謝謝呀,又多了解了一樣東西,感恩喔 ^___^
本篇文章回覆於2005-11-22 19:34
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

達可達
檢舉此回應
--decimal double float 應該是在override ToString( IFormatProvider .. )

上面講錯了...不是 override 而是去實作 System.IFormattable 的 System.IFormattable.ToString 方法

金拍洗~ ^^|
本篇文章回覆於2005-11-22 20:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

JouMing
檢舉此回應
哦哦,才一天而已,就這麼多人熱心回復了ㄚ,謝謝各位大大ㄚ…
本篇文章回覆於2005-11-23 09:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

chunhsing
檢舉此回應
又學到一項技術~
感謝上面的熱心指導
本篇文章回覆於2009-12-07 15:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

阿明
檢舉此回應
您在幫我推文嗎?
哈哈~謝謝啦!
本篇文章回覆於2009-12-08 10:40
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

Badad
檢舉此回應
內建函數就有四捨五入 別再誤人子弟 ~
(不會用 並不代表他沒提供)

double d1 = 2.5, d2 = 3.545;

Math.Round(d1, 0, MidpointRounding.AwayFromZero); //取四捨五入 3
Math.Round(d2, 2, MidpointRounding.AwayFromZero); //取至小數點後第 2 位四捨五入 3.55
本篇文章回覆於2011-01-05 17:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
回應

小羊窒息
捐贈 VP 給 缺氧的羊:窒息 檢舉此回應
to 11樓, 這一篇是2005年的提問, 當時 dotNet 2.0才剛推出呀,

9成的設計師都還是用1.1版在設計軟體

跟本沒有 AwayFromZero 跟 ToEven可以使用....


本篇文章回覆於2011-01-06 00:40
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
作者回應

阿明
檢舉此回應
哈哈~當時的我還是剛進.net領域的菜鳥耶,而且還是用vs2003開發,我也記得找了很久,沒有您說的東西ㄚ~

而且當初回答這篇文章的,都是小鋪的高手及前輩耶~

我想他們應該不會不知道吧~

不過還是謝謝您有留意到這篇文章啦~
本篇文章回覆於2011-01-06 08:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
回應

老唐
檢舉此回應
還是沒找到真正可用的
Math.Round(4.645, 2, MidpointRounding.AwayFromZero) = 4.64
這樣就有問題了
只要試試4.625與4.645兩個都對, 那才是真的對了
但每一樓好像都沒人寫對
包含第一樓自己寫的(C#)
用4.645*100後竟得到464.49999999999994 真是太奇怪了
本篇文章回覆於2011-01-20 15:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
回應

貝爾丹迪
捐贈 VP 給 貝爾丹迪 檢舉此回應
你說的很有道理
double真的如此
我試過轉成decimal 就可以


本篇文章回覆於2011-01-20 17:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   

回覆
如要回應,請先登入.