C++整数位数统计异常:链式调用std::to_string与std::ceil结果错误
问题原因及解决方法
核心差异
分步实现时,你把std::ceil的返回值存为int类型变量,std::to_string(int)会输出纯整数格式的字符串(比如"123456"),长度为6;但链式调用时,std::ceil返回的是double类型,std::to_string(double)默认会输出带6位小数的格式(比如"123456.000000"),所以字符串长度变成了10,结果自然错误。
修正后的链式写法
把std::ceil的结果强制转换为int后再转字符串即可:
#include <string> #include <cmath> // 必须包含cmath头文件,std::ceil依赖它 float videoLengthMs = 123456; int charnm = std::to_string(static_cast<int>(std::ceil(videoLengthMs))).length();
额外提示
- 分步写法中,
double类型的ceil结果赋值给int变量时,会自动丢弃小数部分(这里因为ceil结果是整数,所以没问题);链式调用缺少这个类型转换步骤,直接使用了浮点数的字符串输出规则。 - 实际代码中处理除法结果时,只要保持
ceil后转int再转字符串的逻辑,就能准确统计整数位数。
内容的提问来源于stack exchange,提问作者Fabio
相关产品推荐
相关产品推荐

