伊莉討論區

標題: c語言取小數點問題 [打印本頁]

作者: cs761022222    時間: 2013-5-30 10:42 AM     標題: c語言取小數點問題

各位大大好,我想問如何指取小數點的數字?
例如: 1/4=0.25,我只想要數出25這個數字
請問程式碼該如何撰寫? 我是使用dev c++


作者: snowflying    時間: 2013-5-30 01:28 PM

可以用 sprintf 將他輸出到陣列
然後取小數點後的數值
如果沒有小數點,則取 0 值
C++ 底下可用 stringstream 替代 sprintf
作者: f007520    時間: 2013-5-30 01:52 PM

本帖最後由 f007520 於 2013-5-30 03:18 PM 編輯

不好意思,我搞錯問題了,
我以為是要限制小數點輸出的位數。

這是我想到的方法,但其實不是很好。
先除去整數部分的值,只留下小數,
將值與下限做比較,如果不相等的話,就將值乘以10。
不過最好限制while迴圈次數 (用計數器再加上break)
float的有效數字不多,再加上存取與運算float會有誤差,所以其實這方法不是很好。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>

  4. int get_point_value(float f_value);
  5. int main(void)
  6. {
  7.     float value = 5.0 / 4;
  8.     print f("%f\n", value);

  9.     int point_value = get_point_value(value);
  10.     print f("%d \n", point_value);

  11.     system("PAUSE");
  12.     return 0;
  13. }

  14. int get_point_value(float f_value)
  15. {
  16.     int result = 0;

  17.     f_value = f_value - floor(f_value);

  18.     print f("%f\n", f_value);

  19.     while (f_value != floor(f_value))
  20.     {
  21.         f_value *= 10;
  22.         print f("%f\n", f_value);
  23.     }

  24.     print f("%f\n", f_value);
  25.     return f_value;
  26. }
複製代碼


作者: f007520    時間: 2013-5-30 03:11 PM

本帖最後由 f007520 於 2013-5-30 03:15 PM 編輯

這是改良上面的寫法
觀念是由浮點運算到整數運算
這是因為整數運算的速度比浮點數還要快。
先去除浮點數的整數部份,只留下小數點的部份,
然後乘10的6次方,
將所得到的值判斷是否能夠被10整除,
如果可以,就要做去0的動作。

程式碼寫的很亂,細節也沒做好,
麻煩別在意。
缺點大概就是
2/3 = 0.666667
但此函式會輸出666666

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>

  4. int get_point_value(int f_value);


  5. int main(void)
  6. {
  7.     double f_value = 1.0 / 4;
  8.     print f("%f\n", f_value);

  9.     f_value = f_value - floor(f_value);
  10.     int i_value = f_value * 1000000;
  11.     print f("%d\n", i_value);

  12.     int point_value = get_point_value(i_value);
  13.     print f("%d\n", point_value);

  14.     system("PAUSE");
  15.     return 0;
  16. }

  17. int get_point_value(int f_value)
  18. {
  19.     while (f_value % 10 == 0)
  20.     {
  21.          f_value /= 10;
  22.          print f("%d\n", f_value);
  23.     }

  24.     return f_value;
  25. }
複製代碼






作者: cs761022222    時間: 2013-5-30 10:02 PM

本帖最後由 cs761022222 於 2013-5-30 10:04 PM 編輯

原來如此 謝謝大大!這個問題也傷了我很多腦筋...







歡迎光臨 伊莉討論區 (http://a401.file-static.com/) Powered by Discuz!