整數(浮點數)轉字串

2021-06-26 23:30:28 字數 1276 閱讀 6473

在實際專案中,我們不可避免的遇到需要將整數(浮點數)轉換為字串輸出(儲存為檔案或者顯示列印)。這是乙個很常見的演算法,標準c庫甚至提供了諸如itoa,ltoa,之類的函式供大家呼叫。但是,在一些特殊場合,比如對功耗要求比較苛刻的場合,則對轉換速度提出了要求。在微控制器應用中,很多mcu沒有除法器,和除法指令,我們就得變通一下。

1. 浮點數轉字串

我們知道,在微控制器中,浮點運算是比較費時的運算。我們就可以根據自己的精度要求,先將浮點數轉換為整數,在進行整數運算,則會節約不少運算時間。比如我們在資料採集儲存過程中,只需要保留小數點後面三位。那麼,我們對需要轉換的浮點數乘以1000,得到整數。

float f= 417.123;

int it = 0;

it = (int)(f*1000);

2. 整數轉換為字串

一般情況下,我們為了**的簡潔直觀,我們會採用如下形式.然後將得到的字串顛倒一下次序就可以了,因為是從低位往高位計算的。

while(val!=0)

但是,這個方法,每得到一位需要兩次除法運算。故,我們改進一下,

while(val!=0)

這樣,用幾次移位和加減法,代替一次除法,效率就得到了很大的提公升。

如果之前是浮點數轉整數,再進行轉化的,需要記住小數點的位置。

甚至,在某些場合,我們是能預先知道我們這個整數的最大值(這種是可能的,因為對功耗要求極為苛刻的場合,大多都是資料採集系統),也就是數字的位數,我可以用減法來代替除法。據說,很多mcu都是這樣幹的。假如,我的應用中,資料最大值不會超過999999,那麼用空間換時間的寫法如下,

先定義乙個函式,該函式用於獲取s的最高位,t指明了最高位是在哪一位。比如,s小於1000,那麼t=100。

u8 func(u32 *s, u32 t)

return i ;

}

接下來可以得到字串。再特別說明,我預先知道val不會大於999999.

buf[1]=  func(&val, 100000);

buf[2]= func(&val, 10000);

buf[3]= func(&val, 1000);

buf[4]= func(&val, 100);

buf[5]= func(&val, 10);

buf[6]= '0' + val;

Python 字串 整數 浮點數

幾個函式 str 將乙個整數或者浮點數變成字串 int 將乙個浮點數或乙個字串變成整數 float 將乙個整數或者字串變成乙個浮點型資料 整數的運算永遠是精確的,而浮點數的運算可能會有四捨五入的誤差 len 可以獲取字串的個數,整數和浮點數沒有這函式 type 可以檢視乙個資料或者變數的型別 有有兩...

c 中字串轉浮點數stod vs atof

背景 程式需要從檔案中讀取double精度的資料。隨著程式的更新,檔案也會更新。但有時候,更新了檔案,卻忘記更新程式,這時啟動程式時,就會coredump。gdb coredump也很容易看出問題,但不能一出問題就讓程式crash啊。於是加了try來catch異常,但是無果,還是dump,於是查了一...

c語言整數轉浮點數 浮點數的秘密

我們在學習 c 語言時,通常認為浮點數和小數是等價的,並沒有嚴格區分它們的概念,這也並沒有影響到我們的學習,原因就是浮點數和小數是繫結在一起的,只有小數才使用浮點格式來儲存。其實,整數和小數可以都使用定點格式來儲存,也可以都使用浮點格式來儲存,但實際情況卻是,c 語言使用定點格式儲存整數,使用浮點格...