【发布时间】:2016-03-16 07:40:51
【问题描述】:
#include <iostream>
#include <cmath>
using namespace std;
string number = "159";
float valueFloat = 0;
int valueInt = 0;
int main()
{
for(int i = number.length()-1; i >=0; i--)
{
valueInt += (number[i]-48) * pow(10,i);
valueFloat += (number[i]-48) * pow(10,i);
}
cout<<"Int value: "<<valueInt<<endl;
cout<<"Float value: "<<valueFloat<<endl;
return 0;
}
输出:
Int value: 950
Float value: 951
为什么这段代码返回不同的值?为什么这里的 Int 类型是错误的?
【问题讨论】:
-
因为
pow计算的是浮点结果,在转换为int 时会被截断。 -
下次说一下为什么你会期望输出不同,不过我会赞成,因为你还是新来的。
-
"为什么这里的 Int 类型有误?" -- 它永远不会错。该程序完全按照您告诉它的方式执行。如果结果不是你所期望的,你没有告诉它你认为你做了什么。 (在编译器或标准库中发现错误非常不太可能,尤其是对于初学者而言。);-)
标签: c++ floating-point int precision