關於FLOAT型別結尾的零的問題 原創

2021-06-15 20:12:43 字數 463 閱讀 9565

在c++中,將float型別的數字轉化為字串一般用sprintf或strcpy等等的方法,這其中涉及到float型別的格式化問題。

一般情況下,使用%f可以把float型別轉化為字串,不過這個轉化是有缺點的,缺點就是這個數字是有固定的預設小數字數的,這個預設位數是6,即當你把float型數字1用%f格式化時,得到的字串是1.000000。一定讓人很不舒服。一般的解決方法是使用位數限定標記。比如當你想保留兩位小數時使用%.2f,那麼得到的字串就是1.00。是不是稍微好一點?但是仍然讓人不滿意,難道就沒有方法能夠去除小數結尾多餘的零嗎?

有的。方法就是%g,使用這種格式化方法可以得到人們所熟悉的小數,不必再為多餘的小數後的零操心了。而且%g的格式化方法和%f有相同之處,即在%f上使用的格式限定標記,在%g上同樣適用。比如我們用%.4f來格式化小數1.01000,得到的字串是1.0100,同樣,使用%.4g來格式化1.01000得到的字串是1.01。是不是很方便呢?

關於float的精度型別

1 主要記錄一下為什麼float的精度型別為6 7位 首先,應該明確float資料型別,佔4個位元組,共4 8 32位,其中 ieee754標準規定如下 32位當中,1位為符號位 8位指數字 23位為數值位。故float型別的數值是由後邊的23位決定。23位指的是2進製數可以表示2 23取值範圍以內...

關於float資料型別的雷

在用到float型別時,遇到了之前沒有關注的 三個雷 雷一 在用sqlserver呼叫其它sqlserver資料庫時,對方給我的資料型別是float,但介面文件中說是 numeric 30,10 型別,於是我就用numeric 30,10 去接收,導致接收資料錯誤 如 原資料是 45.78,接收過來...

C 中float和double型別的精度問題說明

float和double的範圍是由指數的位數來決定的。float的指數字有8位,而double的指數字有11位,分布如下 float 1bit 符號位 8bits 指數字 23bits 尾數字 double 1bit 符號位 11bits 指數字 52bits 尾數字 在數學中,特別是在計算機相關的...