g*****1 发帖数: 998 | 1 文件中原始数据都是小数点后只有2位的比如 123.88 96.65
然后我用了float price = floor(atof(csvCell.c_str())*100)/100;
我知道一般c++里float数不能直接比较,因为看上去一样,可能不一样,
可是我保留了小数点后只有2位之后也不能直接比较吗 |
t****t 发帖数: 6806 | 2 确定只有两位的话, 就乘100比较整数吧.
【在 g*****1 的大作中提到】 : 文件中原始数据都是小数点后只有2位的比如 123.88 96.65 : 然后我用了float price = floor(atof(csvCell.c_str())*100)/100; : 我知道一般c++里float数不能直接比较,因为看上去一样,可能不一样, : 可是我保留了小数点后只有2位之后也不能直接比较吗
|
U*****e 发帖数: 505 | 3 memory里floating point是按2的多少次方存的,十进制里小数点后两位在二进制里不
是整的。
如果你只关心小数点后两位,x100转换成整数再比较就好了。
或者fabs(x1-x2)<0.01更快点。
【在 g*****1 的大作中提到】 : 文件中原始数据都是小数点后只有2位的比如 123.88 96.65 : 然后我用了float price = floor(atof(csvCell.c_str())*100)/100; : 我知道一般c++里float数不能直接比较,因为看上去一样,可能不一样, : 可是我保留了小数点后只有2位之后也不能直接比较吗
|
a*****i 发帖数: 268 | 4 如果确定原始数据都是2位小数,还是可以atof后直接比较的。
虽然6.44+6.44==12.88不一定成立;atof("12.88") == atof("12.88")总是成立的。 |
f******y 发帖数: 2971 | 5 agree with this. However, I never use '==' to compare any floating type
variables.
【在 a*****i 的大作中提到】 : 如果确定原始数据都是2位小数,还是可以atof后直接比较的。 : 虽然6.44+6.44==12.88不一定成立;atof("12.88") == atof("12.88")总是成立的。
|
a******d 发帖数: 191 | 6 If you know exactly, the only steps involved are
1. Parsing string
2. Compare sesults in the previous step
Then you can still test
float(atof(stringA)) > float(atof(stringB))
Results guarenteed to be correct still. |