如何在C中获得重复小数0.99999999 ...
1.0 / 9.0会给我重复小数:0.1111111,但是如果使用的话 double = 1.0 / 9.0 * 9.0结果为1.0
谢谢。
答案 0 :(得分:0)
你遇到的问题是,当你再次乘以9时,1/9是基数10(0.1111 ..)和基数16(0.1c71c7 ..)的重复小数,你得到1 ..就浮点例程而言。在C中获得0.9999的方法是通过减去一点点来分解重复的小数,这样它就不会回到1.如果你只想看9,你需要限制打印出来的数量。某些方法除了浮点格式之外。这将满足您的需求:
#include <stdio.h>
#include <string.h>
main()
{
double val=9;
char disp[21];
val=1.0/9.0;
val -= 0.0000000000000001;
printf("%20.19f\n", val);
val *=9;
printf("%20.19f\n", val);
sprintf(disp,"%20.19f",val);
printf("%.15s\n", disp);
}
这给出了:
0.1111111111111110078
0.9999999999999991118
0.9999999999999
在我的机器上。
答案 1 :(得分:-1)
这种情况发生了,因为结果不是真的0.1111111。您可以使用std::setprecision(numOfDecimals)
#include <iomanip>
进行检查
这是一个小例子:
double a=1.0/9.0;
double b=9.0;
std::cout<<a*b; //result is 1
从数学上的原因:(1/9)*(9/1)=(9/9)= 1.
如果我们确实有这样的结果:
double a=round(1.0/9.0 * 100.0)/100.0;//100 for 2 decimal places: here is 0.11 actualy
double b=9.0;
std::cout<<a*b; //result is 0.99