Boost Lexical cast的精度改進

2021-09-06 01:35:26 字數 839 閱讀 8377

lexical_cast函式模版為以文字表示的任意的型別之間的轉換提供了方便和一致的形式。它提供的簡化形式是在表示式級別上的簡單性易用性。

現象:

string s = "123456.78932323";

float f = boost::lexical_cast(s);//轉過後的結果是123456.79

double d_f = boost::lexical_cast(s);//轉過後的結果是123456.7890656

double d = boost::lexical_cast(s); --總共為17位

早起的版本對於lexical_cast的精度預設值總是設定為6;

而最近的1.4版本,檢視原始碼,發現其已根據所轉換的型別的預設精度來設定其轉換精度:

templatebool operator>>(inputstreamable& output)

float為:9

double:17:

string型別的為:118

windows平台

如果需要精確的轉換精度,目前lexical_cast沒有提供精度設定介面,可以自己寫乙個加上,不過少了可移植性,boost官方文件上給出說明:

double dble = 123456.7893232338;

std::stringstream ss;

ss.precision(20);

ss << setw(15) << dble;

string ssd = ss.str(); //轉過後的結果:123456.7893232338

Boost Lexical cast的精度改進

lexical cast函式模版為以文字表示的任意的型別之間的轉換提供了方便和一致的形式。它提供的簡化形式是在表示式級別上的簡單性易用性。現象 string s 123456.78932323 float f boost lexical cast s 轉過後的結果是123456.79 double ...

長度短點的uuid UUID不失精度,長度改進

在使用到uuid的時候,往往頭疼於它的長度 如1bfe50d8 544e 4e8a 95b8 199ceff15268 於是乎就有了改寫uuid的各種方法 1.去除 的uuid 不覺得uuid很長,但是就是看著中間的 很難受,又佔長度,簡單直接點就是 uuid uuid uuid.randomuui...

關於單精度 雙精度的概念

單精度和雙精度數值型別最早出現在c語言中 比較通用的語言裡面 在c語言中單精度型別稱為浮點型別 float 顧名思義是通過浮動小數點來實現資料的儲存。這兩個資料型別最早是為了科學計算而產生的,他能夠給科學計算提供足夠高的精度來儲存對於精度要求比較高的數值。但是與此同時,他也完全符合科學計算中對於數值...