2012-10-07 59 views
-1

我試圖做到以下幾點:爲什麼,即:10 ^((77-109)/ 32),在Silverlight C#中不起作用?

10^((77-109)/32) = 0,1 

在C#:

MessageBox.Show((Math.Pow((((77-109)/ 32)), 10)).ToString()); 

輸出:

1 

這是怎麼回事?我怎樣才能得到正確的答案?

+0

你給出的代碼將打印0,而不是1 ... –

+0

你的問題是不一致的;你想做77-109,還是88-109? – Vulcan

+0

我改正了你的問題。不要發佈虛假代碼。發佈真實的代碼。使用剪貼板。你希望我們關心你的問題。告訴我們你也很關心正確的問題。 –

回答

2

您正在使用導致C#使用整數算術的所有整數操作數;

(88-109)/ 32 =(四捨五入到)0,0^10 = 0(這是你的代碼行會顯示什麼,而不是1)

的正確路線,以獲得結果你想在你的問題的頂部是;

MessageBox.Show((Math.Pow(10.0, (77.0 - 109.0)/32.0)).ToString()); 

哪個正確地顯示0.1。注意十進制數而不是整數的變化,以及(錯誤的)x^1010^x的交換。

+0

迂腐我知道。但更多的是使用整數算術,而不是使用整數操作數。顯然,所有的整數操作數都會導致ineger分割。 –

+1

@DavidHeffernan同意,澄清。 –

+0

我很抱歉造成不便,我的剪貼板搞砸了。 感謝您的代碼,工作。我試圖Math.Pow多個雙打,所以當我嘗試88時,它又錯了。將其更改爲88.0 :)。 – Niels

2

您已將Math.pow;您的代碼將(88-109)/32提升至10的冪次,結果,您將收到意想不到的結果。交換參數(並糾正88到77)將給你預期的結果0.1,因爲它然後將評估10^-1

MessageBox.Show((Math.Pow(10, (77 - 109)/32)).ToString()); 
相關問題