银行家舍入VS四舍五入(下):.NET发现之旅(四)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                银行家舍入VS四舍五入(下):.NET发现之旅(四)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            接上節 這一節繼續討論銀行家舍入和四舍五入  三,自己動手開發四舍五入組件<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 
                        
                        
                        ?
事實上四舍五入在很多項目中還經常使用,所以我們可以動手開發一個這樣的組件,以后可以在多個項目中重用。 在開發四舍五入組件之前,先要搞明白doulbe類型和decimal類型的精度問題,這也是很多學員迷糊的地方。 根據double類型和decimal類型表示的最大值和最小值的區間,我們會發現double類型的值最多能顯示出15個有意義的數字(不包裹小數點),而decimal類型的值最多能顯示出來29個有意義的數字(不包裹小數點),從這里也能看出為什么decimal類型又成為貨幣類型,因為它足夠精確。如果double類型的值超過15個數字,就會截斷,同樣如果deciaml類型的值如果超過29個數字,就會截斷。但截斷的時候會四舍五入。例如:?
double MyDouble1 = 123456789.34654654101104153453413212; double MyDouble2 = 1234567890.34654654101104153453413212; decimal MyDecimal1 = <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />123456789.34654654101104153453513212m; decimal MyDecimal2 = 1234567890.34654654101104153453513212m; Console.WriteLine(MyDouble1);//double輸出時最多有15個數字。 Console.WriteLine(MyDouble2);//double輸出時最多有15個數字。 Console.WriteLine(MyDecimal1);//decimal輸出時最多有29個數字。 Console.WriteLine(MyDecimal2);//decimal輸出時最多有29個數字。 Console.WriteLine();?
同樣采用生成格式的辦法來輸出double類型和deciaml類型也會截斷,但是根據格式的長度,會面會自動補零。例如: double i = -12345.67897456345; Console.WriteLine(string.Format("{0:f" + 99 + "}", i));//大于等于100時出錯 decimal j = -12345.67897456345m; Console.WriteLine("{0:f" + 99 + "}", j);//大于等于100時出錯 Console.WriteLine();?
上面這個兩段代碼的打印結果如下圖 那么為什么最長是15個數字和29個數字呢? 因為Double 值類型表示一個值介于 -1.79769313486232e308 和 +1.79769313486232e308 之間的雙精度 64 位數字,以及 +0 或-0、PositiveInfinity、NegativeInfinity和非數字(NaN)。如果你耐住性子數數最小值和最大值的位數,你發現時15個數字。而Decimal 值類型表示從正 79,228,162,514,264,337,593,543,950,335 到負 79,228,162,514,264,337,593,543,950,335 之間的十進制數。Decimal 值類型適用于要求使用大量有效的整數及小數位數并且沒有舍入錯誤的財務計算。同樣,如果你耐住性子數數最小值和最大值的位數,你發現是29個數字。 這個組件的思想是利用Truncate方法和數學計算開發的,當然也可以利用封裝Round方法開發。因為這個組件是以前我在項目中用的,所以就沒采用Round方法。 源代碼下載和dll下載在后面。這個組件可以對單個double和decimal進行四舍五入,也可以同時對N個double和decimal進行四舍五入,保留小數點后面多少位沒有限制,但是必須要明白,double不能超過15個數字和decimal不能超過29數字的本質。類關系圖如下圖 最后PS:目前銀行家算法已經寫入小學的教科書,不懂的可以向小學生請教!呵呵總結
以上是生活随笔為你收集整理的银行家舍入VS四舍五入(下):.NET发现之旅(四)的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 如何配置一个最基本的web富文本编辑器?
 - 下一篇: pcb天线和纯铜天线_PCB天线和FPC