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

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

新聞中心

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

前段時間做了一個關(guān)于Multiple Currency的項目。其中遇到了一些關(guān)于精度的問題。
現(xiàn)在我就把其中學(xué)到的東西share一下。

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

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

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

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

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


文章標題:編程基礎(chǔ)回顧:有關(guān)取精度,ToString和Math.Round
分享URL:http://m.5511xx.com/article/coidoce.html