c 소수점 소숫점 첫째 자리와 둘째 자리의 차이|자유 게시판
2017.12.05. 17:46


11.125

22.5

33.75

45.0

56.25

67.5

78.75

90.0


각각 이렇게 되어 있습니다. 궁금한점이 있습니다.

ST_Pro.MaxSpeed = 90;


ST_Pro.block = (float)(ST_Pro.MaxSpeed) /8.0;


u8 ProgMode_2[20]={2,2,4,4,4,6,6,6,8,8,8,8,6,6,6,4,4,4,2 ,2};

hight = ProgMode_2[ST_Pro.TimeCnt];  // ST_Pro.TimeCnt의 초기값은 0이며  일분에 1씩 증가함


ST_Pro.Speed = ST_Pro.block  * hight;  // 즉 이값은 1분에 한번씩바뀜

for(i=1;i<9;i++)
 {
  Dot_block[i-1] = (float)(ST_Pro.block * i);
 }

for(j=0;j<8;j++)
 {
     if((float)(ST_Pro.Speed) >=Dot_block[j]) Nowhight =j+1;
 }

이런 상황인데요

궁금한게 있습니다. 22.5, 45.0, 67.5,90.0 와 같이 소수점 1자리 또는 소수점자리가 0인 값에 해당값들은 

Nowhight 가 기대한 값대로 나오는데

11.125 , 33.75, 56.25, 78.75 처럼 소수점2째자리 까지 있는 녀석들은 Nowhight가 기대한 값보다 1씩 낮게 나옵니다.

왜그런 것일까요??




  • 2017.12.05. 20:23답글

    신고

    지수표기법으로 나타내져서 그런겁니다. 

    1.125E+1
    = 1.125 * 10^1
    = 11.25

    결국 같습니다. 

    표시해야할 숫자가 길어지면 표시하는 방법이

    X.XXX....E+Y 이런식으로 표현합니다.

  • 프로필
    eogh작성자
    2017.12.07. 16:56답글

    신고

    답변 감사합니다^^

  • 2017.12.05. 21:17답글

    신고

    혹시 height가 int형은 아닌가요?

  • 2017.12.05. 21:31답글

    신고

    그건아니네요.. 그런데 저 코드에서 배열 원소를 보면 소숫점 2째자리 이상 나오는 애들이 중요할거같지가 않은데 아닌가요?

  • 프로필
    eogh작성자
    2017.12.07. 16:57답글

    신고

    하늘그네 답변 감사합니다 ^^ 보니까 ST_Pro.Speed 이값이 char 였네요ㅎㅎ.. float 로 바꿔주니 해결되었습니다.

  • 2017.12.05. 22:47답글

    신고

    흠,


Posted by 풀등
,