分析一条语句

来源:百度知道 编辑:UC知道 时间:2024/05/17 16:11:18
分析j=(int)(v[i]*100)%100; 和 j=(int)(v[i]*100+0.5)%100;的区别。
v[i]里是double型(源代码是v.push_back(deal(s)+(double)i/100); )
v[i]*100难道不是整数吗?
三楼的,分析一下代码,v[i]怎么可能等于0.125啊,他的有效数字顶多只有两位啊?我的认为是v[i]*100是整数。

源代码如下

for(i=0;i<n;i++)
{
cin>>s;
str.push_back(s);
v.push_back(deal(s)+(double)i/100); //
}
sort(v.begin(),v.end());
for(i=0;i<n;i++)
{
j=(int)(v[i]*100+0.5)%100; //?????????????????????
cout<<str[j]<<endl;
}

一句话,+0.5就是为了实现四舍五入,因为强制转换double为int是,小数部分全部舍掉了。于是+0.5使其四舍五入,减小误差

v[i]*100难道不是整数吗?
v[i]是double型,v[i]*100就不会是整型的,除非你在前面加上强制转换(int).

for(i=0;i<n;i++)
{
cin>>s;
str.push_back(s);
v.push_back(deal(s)+(double)i/100); //
}
//不知道你的n是多大的,假设>50
//当你输入的是12时,str先获取到12
//那么,当i=50时,v.push_bach(...)获取到的就是12.5

for(i=0;i<n;i++)
{
j=(int)(v[i]*100+0.5)%100; //?????????????????????
cout<<str[j]<<endl;
}
//加上0.5后,达到了数学上的四舍五入的效果.

j=(int)(v[i]*100+0.5)%100实现了小数点后1位的四舍五入功能,如果v[i]=0.124
按照j=(int)(v[i]*100)%100=12
按照j=(int)(v[i]*100+0.5)%100=12
如果v[i]=0.125
按照j=(int)(v[i]*100)%100=12
按照j=(int)(v[i]*100+0.5)%100=13

当double强转成int时,会把小数删除.
如15.3 15.9 都等于15
所以+0.5是为了四舍五入,这时
int(15.3+0.5) = int(15.8) = 15
而int(15.9+0.5) = int(16.4) = 16;
实现了四舍五入

当14.123456*100,是整数吗?double后的小数位有好多,不至2位!

貌似强制转换的时候会四舍五入