2012-11-30 22 views
3

我是一名Java開發人員,我也開始自學C++。我知道Java和C++之間的一些區別,但我不確定這裏發生了什麼。這是我遇到問題的代碼。它只是從一個教程,所以我不擔心準確性。在C++中使用數學

void calculateHourly() { 
    float totalWeeklyWage = mFltHourlySalary * mIntHoursWorked; 
    float totalSales = mIntCostOfShoe * mIntUnitsSold; 
    float totalCommission = (mIntHourlyCommission/100) * totalSales; 
    float grandTotalWage = totalWeeklyWage + totalCommission; 

    cout << "You will get $" << grandTotalWage << " for selling " << mIntUnitsSold << " shoes in a week." 
     << endl; 
} 

的問題是線

float totalCommission = (mIntHourlyCommission/100) * totalSales;

因爲當此方法完成運行時無論什麼原因totalCommission = 0。我調試了這個,並且這個方法中的所有其他變量都等於他們應該等於的值。有了我的Java上限和我對C++的一點知識,告訴我這應該起作用。

我是否在這種方法中遺漏了一些令人痛苦的事情,或者手頭有更大的問題?任何和所有的幫助,不勝感激。

+0

這真的是一個成員函數(方法),而不是一個自由函數嗎? – Pubby

+3

您正在執行整數算術。 Java中的行爲將是相同的。 –

+0

好吧我知道什麼是成員函數,但什麼是免費函數? –

回答

5

下面使用整數除法,其結果是也整數:

mIntHourlyCommission/100 

要麼澆鑄mIntHourlyCommissionfloat,或轉動100float字面:100.0f

+0

冒着迂腐的風險,他不應該使用'100.0f'嗎?否則,編譯器可能會抱怨將「double」截斷爲「float」 –

+0

感謝幫助我將100更改爲100.0,現在它工作得很好。我之前試圖演員,但我可能把演員放在了錯誤的地方。謝謝您的幫助。 –

+0

@ slavik262:採取點,謝謝。 – NPE

6

100被投射爲一個整數和圓角。

你需要使用

float totalCommission = (mIntHourlyCommission/100.) * totalSales; 

float totalCommission = (mIntHourlyCommission/(float) 100) * totalSales; 

,而不是直接丟在了正確的類型。

+0

不是'mIntHourlyCommission'是一個整數的問題嗎?否則100將被提升爲浮動,不是嗎?我會做 'float totalCommission =(float)mIntHourlyCommission/100.0f * totalSales;' –

+0

@ slavik262:是的,是的。只是打字。 –

+0

它只是我正在努力熟悉C++的一個例子。這並不意味着要非常準確或爲每種可能的情況制定計劃。 –

0

你的mIntHourlyCommission爲int且小於100?

0

一般來說,你永遠不應該使用花車錢。使用您所處理的最小數量的最大int類型(例如long int爲cent)。