使用C++进行数学运算

3

我是一名Java开发者,现在开始自学C++。我知道Java和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 ++的少量了解来看,这段代码应该是可以正常工作的。
我是否在这个方法中遗漏了某些非常简单的东西,或者这里有更大的问题?非常感谢任何帮助。

这真的是一个成员函数(方法),而不是自由函数吗? - Pubby
3
你正在进行整数运算,这在Java中的表现将是相同的。 - Ed S.
我知道成员函数是什么,但自由函数又是什么? - Jason Crosby
@JasonCrosby:一个自由函数就像你在例子中所示的那样,即不是类或结构体的成员函数。成员函数的定义看起来像这样:void SomeType::foo() {} - Ed S.
4个回答

6

这里将100转换为整数并四舍五入。

您需要使用:

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

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

不要直接将其转换为正确的类型,而是进行间接转换。


问题不是 mIntHourlyCommission 是一个整数吗?否则 100 就会被提升为浮点数,对吧?我会这样做:float totalCommission = (float)mIntHourlyCommission / 100.0f * totalSales; - Matt Kline
@slavik262:是的,没错。我正想打这个呢。 - Ed S.
这只是我用来熟悉C++的一个例子。它并不打算非常准确或计划每种可能的情况。 - Jason Crosby

5
以下使用整数除法,其结果也是整数:
mIntHourlyCommission / 100

要么将mIntHourlyCommission转换为float类型,要么将100转换为float字面值:100.0f


冒昧指出,他不应该使用100.0f吗?否则编译器可能会抱怨将double截断为float - Matt Kline
谢谢你的帮助,我把100改成了100.0,现在它可以正常工作了。之前我试过进行强制类型转换,但可能放错了位置。感谢你的帮助。 - Jason Crosby
我还是一个C++新手。今天我一直在苦思冥想为什么我的数学运算不起作用。当我将除以100改为100.0f时,你解决了我的问题。现在我的小进度条部件完美地工作了。有趣的是,回答别人的问题可以帮助另一个人解决完全不同的问题。 - Volomike

0

你的mIntHourlyCommission是int类型且小于100吗?


0
一般来说,你永远不应该使用浮点数来处理货币。对于你所处理的最小金额,应该使用可用的最大整型类型(例如,对于分,使用 long int)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接