在C中声明一个只有2个小数点的变量

jms*_*980 2 c math numbers fixed-point decimal

我试图声明一个只有1位小数的变量eLon,这样如果我有代码:

elon=359.8
printf("eLon = %f\n",eLon);
Run Code Online (Sandbox Code Playgroud)

并且输出将是

eLon = 359.8
Run Code Online (Sandbox Code Playgroud)

但是我得到的输出是:

eLon = 359.7999999.
Run Code Online (Sandbox Code Playgroud)

我怎么知道我可以修改printf以便它是:

printf(eLon is %0.1f\n",eLon);
Run Code Online (Sandbox Code Playgroud)

获得理想的结果.这不是我想要做的.我只是希望变量本身只有一个小数位,所以它等于359.8而不是359.7999999,因为这对我所做的任何计算都很重要.你知道我应该如何修改我的代码以获得所需的结果.我尝试过做其他查询中的建议,但它没有用于例如代码:

#include <stdlib.h>
#include <stdio.h>
#include <math.h>

int main()
{
    int endLonn;
    float endLon,eLon;
    endLon=359.8;
    endLonn=359.8*10;
    printf("%d is endLonn\n",endLonn);
    eLon= endLonn / 10;
    printf("elon is %f\n",eLon);
}
Run Code Online (Sandbox Code Playgroud)

给我输出:

elon is 359.00000000
Run Code Online (Sandbox Code Playgroud)

这也不是我想要的.我想elon是359.8.如果你能帮助我调整我的代码,以获得理想的结果,那就太棒了.感谢您的时间.

4pi*_*ie0 8

您可以使用定点算法,而不是试图欺骗double或float和printf.在您的示例的特定情况下,您将以0.1s的原始值表示变量:

int in_10s;
in_10s=3598;
printf("My fixed point variable "
       "represents %d.%01d value\n",
         in_10s/10, abs(in_10s % 10));
Run Code Online (Sandbox Code Playgroud)

在n个小数位的一般情况下,printf的格式应为%d.%0 n d,其中n = log_10(scaling_factor ^ -1),并且缩放因子的解释与此类似.