伊莉討論區
標題:
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會有誤差,所以其實這方法不是很好。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int get_point_value(float f_value);
int main(void)
{
float value = 5.0 / 4;
print f("%f\n", value);
int point_value = get_point_value(value);
print f("%d \n", point_value);
system("PAUSE");
return 0;
}
int get_point_value(float f_value)
{
int result = 0;
f_value = f_value - floor(f_value);
print f("%f\n", f_value);
while (f_value != floor(f_value))
{
f_value *= 10;
print f("%f\n", f_value);
}
print f("%f\n", f_value);
return f_value;
}
複製代碼
作者:
f007520
時間:
2013-5-30 03:11 PM
本帖最後由 f007520 於 2013-5-30 03:15 PM 編輯
這是改良上面的寫法
觀念是由浮點運算到整數運算
這是因為整數運算的速度比浮點數還要快。
先去除浮點數的整數部份,只留下小數點的部份,
然後乘10的6次方,
將所得到的值判斷是否能夠被10整除,
如果可以,就要做去0的動作。
程式碼寫的很亂,細節也沒做好,
麻煩別在意。
缺點大概就是
2/3 = 0.666667
但此函式會輸出666666
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int get_point_value(int f_value);
int main(void)
{
double f_value = 1.0 / 4;
print f("%f\n", f_value);
f_value = f_value - floor(f_value);
int i_value = f_value * 1000000;
print f("%d\n", i_value);
int point_value = get_point_value(i_value);
print f("%d\n", point_value);
system("PAUSE");
return 0;
}
int get_point_value(int f_value)
{
while (f_value % 10 == 0)
{
f_value /= 10;
print f("%d\n", f_value);
}
return f_value;
}
複製代碼
作者:
cs761022222
時間:
2013-5-30 10:02 PM
本帖最後由 cs761022222 於 2013-5-30 10:04 PM 編輯
原來如此 謝謝大大!這個問題也傷了我很多腦筋...
歡迎光臨 伊莉討論區 (http://a401.file-static.com/)
Powered by Discuz!