我试图声明一个只有1位小数点的变量eLon,这样如果我有以下代码:
elon=359.8
printf("eLon = %f\n",eLon);输出结果将是
eLon = 359.8然而,我得到的输出是:
eLon = 359.7999999.我如何知道我可以修改printf,使其成为:
printf(eLon is %0.1f\n",eLon);来得到想要的结果。这不是我想做的。我只希望变量本身只有一个小数位,这样它就等于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);
}给出了输出:
elon is 359.00000000再说一次,这也不是我要找的。我要埃隆是359.8岁。如果你能帮我调整我的代码,以获得想要的结果,那就太好了。谢谢您抽时间见我。
发布于 2015-10-21 06:25:30
您可以使用定点运算,而不是尝试欺骗双精度或浮点数和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));在n位小数的一般情况下,printf的格式应该是%d.%0nd,其中n=log_10(_factor^-1)和缩放因子被解释为here。
发布于 2015-10-21 06:29:06
您需要的不是浮点数,而是一个定点小数,例如,它在c#中以decimal的形式提供。c不会给你这个。有两种“典型”的方法可以使用你自己的方法:
int,按照惯例只将小数点放在某个位置。例如,您的值将是带有两个int的int elon=3598.struct,一个用于整数部分,另一个用于的十分之一(或百分之一,千分之一,...)的数量
在这两种情况下,您都需要实现自己的输出逻辑。使用普通int的简单方法至少可以让您照常使用基本的算术运算。
发布于 2015-10-21 06:28:12
实际上,您不能声明一个变量只包含一个小数位数。唯一能够表示非整数值的本机类型是浮点类型,在浮点类型上的任何算术运算都会产生相同性质的值。浮点类型不能限制为固定数量的小数位数。
为了达到您所要求的目标,您必须使用实现这种行为,或者使用所谓的定点airthmetic的现有实现。
在Wikipedia's Fixed-Point arithmetic entry中可以找到一个相当完整的介绍。最后,你会发现有几个库实现了它。
https://stackoverflow.com/questions/33247782
复制相似问题