要求 算出浮点部分的位数!!!!!不能用数组指针。 求高手
想了好多方法,都以为精度缺失问题失败来。比如
while ((float)cpNum2>(float)(int)cpNum2)
{
cpNum2 *= 10;
bFlt++;
}
求高手给个精准算法,在线等!!!!
我问的就是如何避免这种精度缺失!!!
追答精度的缺失是必然的,计算机存储采用2进制方式存储的,任何10进制数据都会先转化为二进制方式了,然后在按照float的存储方式写到存储空间的,所以要根据你自己的需要来设计这个精度了,不然你去盖茨,也无法解决这个问题
看来还是没明白你的意思,呵呵
追问原题是随机输入double类型的数转换成字符串! 貌似就不能用字符串输入浮点数了吧
追答我不太明白你的意思,这个随机输入不是键盘随机输入一个double类型的浮点数?
然后我写的确实也是将浮点数转换成字符串来处理的。求的是浮点数小数部分的位数。不知道你到底是什么意思呢?
只能这样,计算机储存浮点型数据时只储存小数点后6位,想算具体的只能用数组
追问同学,这个方法我试过,你试试456.1234. 陷入死循环了
追答确实有精度损失,虽然没有死循环但算的是结果是5,明显是错的,可以试试把浮点型转换成64位的longlong型(VC中为__int64)
输入的浮点型末尾不可能是零,所以结果中肯定比原来多一个0,其后的是乱的,你看看能不能根据这个进行编程
原题是随机输入double类型的数转换成字符串!我得分离浮点位的每一位数 对吧。 如果说大侠你说不适合,有没有好的办法求出浮点位数。 我就是在求教。
追答假定有效位是MAX。将0.22000089转化为字符串输出。下面只是参考。
int i=MAX;
char s[MAX];
float d;
input d;
while( i > 0){
s[MAX-i] = d + '0';
d = d - s[MAX-i];
d = d * 10;
i --;
}
print s;