【问题标题】:Displaying floating points in C在 C 中显示浮点数
【发布时间】:2015-02-15 23:13:50
【问题描述】:

是的,我有 2 个文件(距离和时间),它们的行上有不同的值,在程序中将两个值在线划分为它们的速度并显示在屏幕上。

这很好用,但是,该函数将计算值提供为最接近的整数:

#include <stdio.h>


int main()
{

FILE *fTotDc;
FILE *fTotTc;

int CalScD;  //Values for total cycling speed
int CalScT;
float CalScS;
char ScSValue[32];

int DataCount=1; //File line comparison

struct store06 //TICtotD
{
    char defTotDc[16];
}stock06[512];


struct store08 //TICtotT
{
 char defTotTc[16];
}stock08[512];

    fTotDc=fopen("TICtotD.txt","r"); //Opens total distance 
    fscanf(fTotDc,"%16[^\n]%*.2f", stock06[DataCount].defTotDc);
    fTotTc=fopen("TICtotT.txt","r"); //Opens total time
    fscanf(fTotTc,"%16[^\n]%*.2f", stock08[DataCount].defTotTc);

    printf("|Distance        |Time            |Speed           |");
    printf("\n");

    printf("|%-16s",   stock06[DataCount].defTotDc); 
    printf("|%-16s",   stock08[DataCount].defTotTc);

    CalScD = atoi(stock06[DataCount].defTotDc); //Totals are converted to int for calculation
    CalScT = atoi(stock08[DataCount].defTotTc);

    if(CalScT == 0) //Test for 1/0 error, There is also a failsafe in the edit function which checks for t=0;
    {
                  if(CalScD == 0) //If distance is 0 (As it is by default), the speed is 0.
                  {       
                        printf("|0               ");
                  }
                  else  //If distance is not 0 , we have (1/0)*k, which doesn't exist.
                  {   
                        printf("|Error, Time is 0");//Error message given.
                  }
        }
        else
        {
             CalScS = CalScD/CalScT; 
             snprintf(ScSValue,32,"%.2f", CalScS); //Turns this int value into a string
             printf("|%-16s",ScSValue); //String outputted
        }

        printf("|"); //last column
        getch();
    }

这是一行的代码,因为它在一个 do-while 循环中直到文件末尾。

输入(距离文件): Line 1: 4 ,(时间文件) Line 1: 1 。 预期速度输出:0.25 实际输出:0.00

编辑:我的编码技能是 RIP 编辑2:错误,假设整数/整数会自动计算浮点值。我已经相应地更改了代码,它可以工作。谢谢各位。

【问题讨论】:

  • atoi 返回一个整数。设计 int/int 给出一个整数。您可以将第一个乘以 1.0,这会将其转换为浮点数,返回值将是浮点数
  • 我可以推荐使用double 而不是float
  • @ShaZiv “将第一个乘以 1.0 将其转换为浮点数”更好地表述为“将第一个乘以 1.0 将其转换为双精度”。要获得float,请使用1.0f

标签: c file loops structure scanf


【解决方案1】:

CalScS = CalScD/CalScT;中,首先执行integer除法,然后将结果值转换为float并赋值给变量。

试试这个

CalScS = CalScD/(double)CalScT;

先将分母转为浮点数,再做除法,正确赋值。

哦……而且(几乎)总是更喜欢double 而不是float

【讨论】:

    【解决方案2】:

    在您的代码中

    int CalScD;  //Values for total cycling speed
    int CalScT;
    

    两者都是 int 类型,CalScSfloat 类型。

    在计算除​​法时使用

    CalScS = CalScD/CalScT;
    

    首先,除法将作为整数除法[产生int 值],然后,int 结果将提升浮动。这就是您获得integer 输出的原因。

    改变

    CalScS = CalScD/CalScT;
    

    CalScS = ((float)CalScD )/CalScT;
    

    强制浮点除法。

    【讨论】:

    • @CoolGuy aah..对不起。我从上面的答案中复制了代码。固定。
    【解决方案3】:

    您的计算行CalScS = CalScD/CalScT; 正在进行整数除法,因为两个操作数都是整数。

    您需要一个(或两个)操作数为floats(或doubles)才能进行浮点除法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多