[英]Is Math.Pow(10, Math.Abs(1)) equal to 10?
我目前正在維護一個前同事的代碼,並發現以下代碼(示例):
double someValue = 20, someResult;
someResult = (Convert.ToInt32(Math.Round(someValue / (Math.Pow(10, Math.Abs(1))), MidpointRounding.AwayFromZero) * Math.Pow(10, Math.Abs(1))) + 10) - someValue;
我不知道為什么他使用Math.Pow(10, Math.Abs(1))
而不是10
? 是因為不准確還是某種原因?
如果代碼更改為:結果是相同的:
someResult = (Math.Round(someValue / 10, MidpointRounding.AwayFromZero) * 10 + 10) - someValue;
使用10
代替(Math.Pow(10, Math.Abs(1))
的唯一區別是類型。如果在代碼中寫入10
,編譯器會將數字視為int
但是Math.Pow
將返回a double
。
有時這可能會有所作為。 例如,如果someValue
是一個int
則someValue/10
將使用整數除法,因此可能無法達到您的期望。 在這種情況下,盡管someValue
是double
someValue
的,所以您將以任何一種方式使用浮點除法。
所以是的,您可以放心地用10
代替Math.Pow
調用。
至於為什么這樣-我經常發現這種代碼存在是因為它本來更復雜,然后又簡化了。 例如,最初可能是Math.Pow(10,precision)
東西,或者可能需要方法調用的東西。 然后,有人決定始終使精度為1並相應地進行更新,而實際上並未簡化任何可以簡化的代碼。
實際的原因雖然是純粹的猜測。 如果這在源代碼管理中,則可能會有一個提交注釋對此進行解釋,否則,您可能會找到作者並詢問他們...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.