2.3 自寫函式
2.4 ecvt()函式
2.5 效果執行比較
把很小的數,它接近0但不等於0
通過計算過程中,會有精度丟失的可能!
解決的方法:把浮點數 字串化,這樣精度就不會丟失了
檔案讀取
sprintf()
自寫函式
ecvt()函式
效果最好
效果最好
效果好效果稍差
速度快幾乎沒有限制
速度快限制多
限制少效果最好
見 1.3.1 小節
sprintf 跟 printf 用法上區別:
前者列印到字串中
後者直接在命令列上輸出
效果最好,速度還快,不知道複雜度是多少
解析:
int
sprintf
(char
*string,
char
*format [
,argument,..
.]);
int j =
sprintf
( buffer,
" string: %s\n"
, s)
; j = 返回寫入的字元總數
buffer = string
" string: %s\n"
=char
*format
, s =
[,argument,..
.]
基本使用**:
效果對比見 2.5
思路:
注意正負號的處理!
把浮點數 (double)number 分為兩部分 = 整數部分int_t 和 小數部分temp
int_t = (long long)number/1;
temp = number - int_t;
ini_t對10取餘,將其存進字元陣列首位,int_t = int_t/10; 繼續迴圈剛剛的操作,直到int_t == 0 成立,就結束迴圈,將此時的字元陣列前後元素一次交換
把 小數點』.'存進字元陣列裡,int_t = temp * 10; int_t對10取餘存進字元陣列,temp = temp*10 - int_t; 繼續迴圈剛剛的操作,直到temp == 0 成立
把最後的 『\0』 放進字元陣列末尾
#include
#define num 100000
using
namespace std;
typedef
struct
str;
void
init
(str &str)
// 初始化
void
change
(char str,
int low,
int high)
// low - high交換
}void
print
(str str)
// 輸出 str 的資訊
else
}int
main()
else
int_t =
(long
long
)number;
// int_t 整數部分
temp = number - int_t;
// temp 小數部分
if(temp <0)
temp =
-temp;
cout <<
"int_t = "
<< int_t<< endl;
cout <<
"temp = "
<< temp<< endl;
if(int_t ==0)
else
str.length1 = i;
cout <<
"123"
<< endl;}if
(str.data[0]
=='-'
) low =1;
else
low =0;
change
(str.data, low, i-1)
; str.data[i]
='.'
; cout <<
"123"
<< endl;
while
(temp !=0)
cout <<
"123"
<< endl;
str.length2 = i;
str.data[i]
='\0';}
cout <<
"str = "
;print
(str);
fp =
fopen
("./range.txt"
,"w+");
fputs
(str.data, fp)
;fclose
(fp)
;system
("pause");
return0;
}
char* ecvt(double value, int ndigit, int *decpt, int *sign);
把乙個雙精度浮點數轉換成乙個字串。
value:要轉換的浮點數
儲存最多ndigit個數字值作為字串,並新增 『\0』,value中數字個數超過ndigit,低位數字被捨入。少於ndigit個數字,用0填充。
decpt:小數點位置的整數值, 從字串的開頭位置計算
0或負數指出小數點在第乙個數字的左邊。
sign:數的符號
如果該整數為0,這個符號數為正數,否則為負數。
上:自寫函式;下:ecvt()函式
和 sprintf() 比較的話…
可以看到,自己編寫的函式得到的有效數字 要比 ecvt()函式要多一些,但遠遠不如 sprintf()!
ecvt() 讀不了ldbl_min,但自己寫的函式勉強可以
浮點數 轉 定點數
將浮點數指標 轉換成 整型指標,以十六進製制的格式輸出指標內容。示例程式 includeint main 測試 輸入 float 輸出 十六進製制 二進位制8.25 41040000 0100 0001 0000 0100 0000 0000 0000 0000 8.25 c1040000 1100...
整數(浮點數)轉字串
在實際專案中,我們不可避免的遇到需要將整數 浮點數 轉換為字串輸出 儲存為檔案或者顯示列印 這是乙個很常見的演算法,標準c庫甚至提供了諸如itoa,ltoa,之類的函式供大家呼叫。但是,在一些特殊場合,比如對功耗要求比較苛刻的場合,則對轉換速度提出了要求。在微控制器應用中,很多mcu沒有除法器,和除...
c語言整數轉浮點數 浮點數的秘密
我們在學習 c 語言時,通常認為浮點數和小數是等價的,並沒有嚴格區分它們的概念,這也並沒有影響到我們的學習,原因就是浮點數和小數是繫結在一起的,只有小數才使用浮點格式來儲存。其實,整數和小數可以都使用定點格式來儲存,也可以都使用浮點格式來儲存,但實際情況卻是,c 語言使用定點格式儲存整數,使用浮點格...