回复 10楼 hjywyj
10进制转二进制 是用乘2取整的方法;有的类型能识别32位那么他只能将32位的小数来进行乘2取整的换算;那么就是截断了后面的小数; 我说的那里错了 假如2.2291
假如有一种类型只能识别到小数的第2位 那么 他只能将2.22来进行乘2去整的运算 你说这个是不是截断 我哪里乱说了~~~~http://support. 这里有官方的解释~ 我上面说的是原理~
如果要解決此問題,您可以確保值是大於或小於您需要什麼,或取得並使用維護精確度的二元 Coded 小數 (BCD) 程式庫。
他这个意思就是 假如你要有一个浮点数 double a;不管你哪里给它一个只 如果这个值为0;那么进行某些运算;不过这里你不能直接
if(a==0){......}
你可以if(a < 1e-06){}
就是说a小于某个你认为足够小的书 就看做它等于0;而造成这种现象的原因 就是截断我说的截断我举个程序的例子:
程序代码:
#include<stdio.h>
int main(){
float a1=1.123456712345677;
float a2=1.123456712345678;
printf("%s",(a1==a2 ? "相同":"不相同"));
return 0;
}
[
本帖最后由 jcw08120110 于 2011-8-17 15:33 编辑 ]