簡體   English   中英

Math.Pow(10,Math.Abs​​(1))等於10嗎?

[英]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是一個intsomeValue/10將使用整數除法,因此可能無法達到您的期望。 在這種情況下,盡管someValuedouble someValue的,所以您將以任何一種方式使用浮點除法。

所以是的,您可以放心地用10代替Math.Pow調用。

至於為什么這樣-我經常發現這種代碼存在是因為它本來更復雜,然后又簡化了。 例如,最初可能是Math.Pow(10,precision)東西,或者可能需要方法調用的東西。 然后,有人決定始終使精度為1並相應地進行更新,而實際上並未簡化任何可以簡化的代碼。

實際的原因雖然是純粹的猜測。 如果這在源代碼管理中,則可能會有一個提交注釋對此進行解釋,否則,您可能會找到作者並詢問他們...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM