日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
編程基礎回顧:有關取精度,ToString和Math.Round

前段時間做了一個關于Multiple Currency的項目。其中遇到了一些關于精度的問題。
現在我就把其中學到的東西share一下。

舉一個例子:
在項目中。所有的item的price 是基于美元的。但是這個item的vendor又是屬于Canada,要給加元,那么在計算amount的時候需要將price * count ,再將結果根據匯率轉換成加元, 再取兩位小數。
例如:$1.45(Price) * 11(Count) = 15.95(Amount)    * 1.2222222222(Exchange Rate)  = 16.56567395 (Amount)
最后 16.56567395 就是我們需要付的money?,F在問題來了,再將16.56567395加元換回美元。。。呵呵。偏差就出現了。

這里就有人提出了關于取精度的問題,
我所知道的有兩種:四舍五入,四舍六入五成雙。不知道大家有沒有試過.net中自帶的ToString與數字格式字符串。它所適用的就是四舍五入的方式來取整。但是它有一個弊病。如果多次進行轉換。數值會偏高。不平衡。
.net中還有一中方式就是Math.Round來取精度。 支持以上所說的兩種機制。
MidpointRounding.ToEven 四舍六入五成雙
MidpointRounding.AwayFromZero四舍五入
當然最終解決方案是MidpointRounding.ToEven.

什么叫四舍六入五成雙??為什么用呢。四舍六入是一樣的,五成雙的意思就是,如果前面一個為偶數就忽略。為奇數就進一位,歐洲銀行全采用這個算法,這樣可以減少偏差

總結:
ToString默認采用四舍五入取精度,
Math.Round 可以選擇取精度方式.

也許你們會提出為什么不從新計算一次Amount,就不用講加元換成美元呢。。。呵呵。  業(yè)務復雜。改動風險大.
這里只是幫助大家回憶一下這次差不多遺忘的東西。只是share.放到首頁也是冒著被拍磚的風險


本文標題:編程基礎回顧:有關取精度,ToString和Math.Round
文章分享:http://www.5511xx.com/article/coidoce.html