向std::stringstream追加除字符串以外的任何内容将返回0
appending anything but a string to std::stringstream returns 0
问题代码:
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 / 45
是0
。(这叫做"整数除法":c++中两个int
除以的结果也是一个int
,因此真实答案被截断,15 / 45
为0
)
如果这是你的问题,在做除法之前把它改成双精度:
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
视为双精度类型,并使用小数点。
相关文章:
- 为什么 c++ 中的 main() 函数不采用除 int 和 void 之外的任何其他返回类型
- 是否有任何内置的哈希图函数来处理 c++ 中的值输入?
- 是否有任何内置函数可以检查给定的两个数字在给定整数数组中的顺序是否相同?
- 函数使用任何输入返回 0
- C++ 中是否有任何内置阶乘函数?
- C++中的函数是否有任何默认返回类型
- 是否有任何内置函数可以告诉编译器分支是否可预测
- 如何检查copy_if是否返回使用ostream_iterator范围内的任何内容
- vector::size() 如何在常量时间内返回向量的大小
- 我需要在C /C#中使用图形.我可以使用任何内置的C /C#库
- 是否有任何内置类可以处理C 中的大整数值
- c ++中是否有任何内置功能可以在计划的时间运行任务
- 是否有任何内置的 UTF 在 c++ 在窗口中
- 在VC++2010中执行任何内置的ARRAY函数
- C++:如何在不使用任何内置函数的情况下将字符串转换为整数
- 是否有任何内置的CUDA函数允许CUDA内核向主机代码报告错误?
- Io_getevents在小于timeout的时间内返回的作业数少于请求的作业数
- 我如何在常数时间(O(1))内获得字母表(1-26)中字符的数值/位置,而不使用任何内置方法或函数
- C++中的任何内置哈希方法
- c++库中的任何内置夹子方法