【问题标题】:fixed point decimal printf output定点十进制 printf 输出
【发布时间】:2016-10-01 18:05:21
【问题描述】:

我的 LCD 在我的 TM4C123 上工作,我的 printf 工作。

我正在尝试使左列的输入看起来像右列的输出。

我尝试的是从整数中提取每个数字,然后将每个数字打印出来,然后将小数点放在那里。当我提取数字时,符号似乎与数字粘在一起,我似乎无法正确格式化它。

outTestCaseType1 outTests1[13]={ 
{     0,  " =  0.000?\r" }, //     0/1000 = 0.000  
{     4,  " =  0.004?\r" }, //     4/1000 = 0.004  
{    -5,  " = -0.005?\r" }, //    -5/1000 = -0.005
{    78,  " =  0.078?\r" }, //    78/1000 = 0.078
{  -254,  " = -0.254?\r" }, //  -254/1000 = -0.254
{   999,  " =  0.999?\r" }, //   999/1000 = 0.999
{ -1000,  " = -1.000?\r" }, // -1000/1000 = -1.000
{  1234,  " =  1.234?\r" }, //  1234/1000 = 1.234
{ -5678,  " = -5.678?\r" }, // -5678/1000 = -5.678
{ -9999,  " = -9.999?\r" }, // -9999/1000 = -9.999
{  9999,  " =  9.999?\r" }, //  9999/1000 = 9.999
{ 10000,  " =  *.***?\r" }, // error
{-10000,  " =  *.***?\r" }  // error
};

我的代码如下:

void ST7735_sDecOut3(int32_t n) {
    int32_t msd,nsd, lsd;
    int32_t value;
    value=n;
 if (value > 999)
 {
  value = 999;
 }

 msd = value / 100;
 value -= msd * 100;

 nsd = value / 10;
 value -= nsd * 10;

 lsd = value;

 printf("%d%d%d", msd, nsd, lsd);

}

LCD上的输出如下:

我正在尽我所能地挑选这个,这是迄今为止我所获得的最接近的。可能有一种更简单的方法,因为我没有经验,但我会继续尝试,因为这是我能做的。

任何提示或帮助将不胜感激。

【问题讨论】:

    标签: c embedded fixed point


    【解决方案1】:

    这不使用您的数据结构或类型,但可以很容易地适应匹配。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(void)
    {
        int values[] = { 0, 4, -5, 78, -254, 999, -1000, 1234, -5678, -9999, +9999, 10000, -10000 };
        enum { NUM_VALUES = sizeof(values) / sizeof(values[0]) };
    
        for (int i = 0; i < NUM_VALUES; i++)
        {
            int32_t value = values[i];
            char integer[2];
            char fraction[4];
            int f_part = abs(value) % 1000;
            int i_part = abs(value) / 1000;
            char sign = ' ';
            if (abs(value) > 9999)
            {
                strcpy(integer, "*");
                strcpy(fraction, "***");
            }
            else
            {
                if (value < 0)
                    sign = '-';
                sprintf(integer, "%d", i_part);
                sprintf(fraction, "%.3d", f_part);
            }
            printf("%6d: = %c%s.%s?\\r\n", value, sign, integer, fraction);
        }
        return 0;
    }
    

    示例输出:

         0: =  0.000?\r
         4: =  0.004?\r
        -5: = -0.005?\r
        78: =  0.078?\r
      -254: = -0.254?\r
       999: =  0.999?\r
     -1000: = -1.000?\r
      1234: =  1.234?\r
     -5678: = -5.678?\r
     -9999: = -9.999?\r
      9999: =  9.999?\r
     10000: =  *.***?\r
    -10000: =  *.***?\r
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-13
      • 2013-01-21
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多