如何在C中获得重复的小数

时间:2016-02-06 21:49:31

标签: c

如何在C中获得重复小数0.99999999 ...

1.0 / 9.0会给我重复小数:0.1111111,但是如果使用的话 double = 1.0 / 9.0 * 9.0结果为1.0

谢谢。

2 个答案:

答案 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

Example