2016-10-01 18 views
1

私のLCDはTM4C123で動作していますが、printfは動作しています。固定小数点10進数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 
}; 

私のコードは次のとおりです。LCDに次のように出力されている

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); 

} 

enter image description here

私は同じくらい私はできる限りこれを選んだし、これは私がこれまでに得たものと同じくらいです。私の経験不足のために見えないより簡単な方法があるかもしれませんが、それは私ができることすべてであるので、私は試し続けます。

ご意見やご協力をいただければ幸いです。

答えて

0

これはデータ構造や型を使用しませんが、一致するように容易に適合させることができます。

#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