浮點數 轉 字元 sprintf

2021-10-05 16:40:27 字數 3859 閱讀 6932

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 語言使用定點格式儲存整數,使用浮點格...