首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中声明只有两个小数点的变量

在C中声明只有两个小数点的变量
EN

Stack Overflow用户
提问于 2015-10-21 06:18:14
回答 4查看 5K关注 0票数 2

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

代码语言:javascript
复制
elon=359.8
printf("eLon = %f\n",eLon);

输出结果将是

代码语言:javascript
复制
eLon = 359.8

然而,我得到的输出是:

代码语言:javascript
复制
eLon = 359.7999999.

我如何知道我可以修改printf,使其成为:

代码语言:javascript
复制
printf(eLon is %0.1f\n",eLon);

来得到想要的结果。这不是我想做的。我只希望变量本身只有一个小数位,这样它就等于359.8而不是359.7999999,因为这对于我进行的任何计算都是至关重要的。你知道我应该如何修改我的代码来获得想要的结果吗?我尝试执行其他查询中建议的操作,但它不起作用,例如代码:

代码语言:javascript
复制
#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);
}

给出了输出:

代码语言:javascript
复制
elon is 359.00000000

再说一次,这也不是我要找的。我要埃隆是359.8岁。如果你能帮我调整我的代码,以获得想要的结果,那就太好了。谢谢您抽时间见我。

EN

回答 4

Stack Overflow用户

发布于 2015-10-21 06:25:30

您可以使用定点运算,而不是尝试欺骗双精度或浮点数和printf。在您的示例的特殊情况下,您将以原始值的0.1s来表示变量:

代码语言:javascript
复制
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

票数 8
EN

Stack Overflow用户

发布于 2015-10-21 06:29:06

您需要的不是浮点数,而是一个定点小数,例如,它在c#中以decimal的形式提供。c不会给你这个。有两种“典型”的方法可以使用你自己的方法:

  1. 使用一个普通的int,按照惯例只将小数点放在某个位置。例如,您的值将是带有两个int的int elon=3598.
  2. Use a struct,一个用于整数部分,另一个用于

的十分之一(或百分之一,千分之一,...)的数量

在这两种情况下,您都需要实现自己的输出逻辑。使用普通int的简单方法至少可以让您照常使用基本的算术运算。

票数 2
EN

Stack Overflow用户

发布于 2015-10-21 06:28:12

实际上,您不能声明一个变量只包含一个小数位数。唯一能够表示非整数值的本机类型是浮点类型,在浮点类型上的任何算术运算都会产生相同性质的值。浮点类型不能限制为固定数量的小数位数。

为了达到您所要求的目标,您必须使用实现这种行为,或者使用所谓的定点airthmetic的现有实现。

Wikipedia's Fixed-Point arithmetic entry中可以找到一个相当完整的介绍。最后,你会发现有几个库实现了它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33247782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档