向std::stringstream追加除字符串以外的任何内容将返回0

appending anything but a string to std::stringstream returns 0

本文关键字:任何内 返回 stringstream std 追加 字符串      更新时间:2023-10-16

问题代码:

        std::stringstream cd;
        int f = int((15 / allyCounter) * 100);
        cd << f;

allyCounter等于45。这个想法是得到百分比15的allyCounter,其中allyCounter是一个动态int,不断变化。我没有太多的c++经验,所以我肯定我错过了一些基本的东西。

这里的问题几乎可以肯定是整数数学和浮点数学。

15/45(在整数数学中)是0。

    std::stringstream cd;
    int f = int((15.0 / allyCounter) * 100);
    cd << f;

…看看情况是否有所好转。15.0是一个双精度浮点常量,因此这将强制以浮点数而不是整数进行数学运算,因此您将得到一个百分比。

另一种可能是先做乘法再做除法:

int f = 1500 / allyCounter;

如果分子是一个变量,这可能会导致分子溢出的问题,但在这种情况下,我们知道这是一个不能溢出的值

在c++中,15 / 450。(这叫做"整数除法":c++中两个int除以的结果也是一个int,因此真实答案被截断,15 / 450)

如果这是你的问题,在做除法之前把它改成双精度:

int f = static_cast<double>(15) / allyCounter * 100;

甚至:

int f = 15. / allyCounter * 100;

(15.中的.使其为双精度)

你正在使用整数除法:

std::stringstream cd;
int f = int((15.0 / allyCounter) * 100);
cd << f;

编译器看到15/allyCounter并认为它应该返回一个整数(您传递给它两个整数,对吗?)15/150 == 0用整数除法,你总是四舍五入。在这种情况下,编译器将15.0视为双精度类型,并使用小数点。