對Boost庫中的數值到字串的轉換的改進 (轉)
Boost庫中的lexical_cast功能很強大,但存在一個浮點數的精度問題。在阿炯的《走進Boost》中描述如下:
#include
#include
#include
int main()
{
using std::string;
const double d = 123.1234567;
string s = boost::lexical_case
std::cout< return 0;
}
以上預想的結果是得到:"123.1234567",但是實際上我們只會得到"123.123",因為預設情況下std::stringstream的精度是6。這算是boost::lexical_cast的一個。
阿炯提供一個解決辦法:
對頭
//....
template
Target lexical_cast(Source arg) {
//.....
Target result;
//以上一行是增加內容
interpreter.precision(std::numeric_limits
我按照上述方法在我的機器上怎麼也得不到正確結果。(BCB 6)
就算可行的話,也存在以下問題:只能得到一種精度的字串。
我使用以下方法解決以上的問題:
利用C++中的函式過載機制,增加一個函式:
template
Target lexical_cast(Source arg)
{
//......
Target result;
if(!(interpreter << arg) || !(interpreter >> result) ||
!(interpreter >> std::ws).eof())
//....
}
template
// 下面一行修改了
Target lexical_cast(Source arg,int length)
{
# ifdef BOOST_LEXICAL_CAST_USE_STRSTREAM
std::strstream interpreter; // for out-of-the-box g++ 2.95.2
# else
std::stringstream interpreter;
# endif
Target result;
// 增加下面一行
interpreter.precision( length );
if(!(interpreter << arg) || !(interpreter >> result) ||
!(interpreter >> std::ws).eof())
throw bad_lexical_cast();
return result;
}
}
使用時如下:
std::string s = boost::lexical_cast<:string>(123.1234567,10);
即可以得到正確的結果,而且原來的函式不變。
小結
不管多好的東西,總會有些小問題和不如意的東西,能夠自己動手加以改進,是很好的事。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992543/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 將數值轉換為字串的函式字串函式
- 字串、數值 等型別的相互 安全轉換字串型別
- JavaScript 字串轉換數值型別JavaScript字串型別
- c++中數字和字串的轉換C++字串
- C語言的本質(26)——C標準庫之數值字串轉換C語言字串
- [C/C++11]_[初級]_[如何轉換帶井號的#十六進位制顏色字串到數值]C++字串
- 字串和數字的相互轉換字串
- char型別的數值轉換型別
- Go 中數字轉換字串的正確姿勢Go字串
- 數的進位制轉換
- JS中將一個值轉換為字串的3種方法JS字串
- javascript數字和字串的相互轉換JavaScript字串
- 掙值管理在系統工程專案中的改進(轉)
- PHP 字串強制轉換為數值問題PHP字串
- oracle轉換JAVA生成的時間數字串OracleJava字串
- [Boost]一種簡單的批分字串的辦法 (轉)字串
- Oracle中的進位制轉換Oracle
- JavaScript之number型別的數值轉換成某某進位制JavaScript型別
- 字串:怎樣轉換字串為數字型別? (轉)字串型別
- Java 中 CLOB 和字串之間的轉換Java字串
- JavaScript字串轉換數字JavaScript字串
- 字串轉換整數(atoi)字串
- 其他進位制的數字 轉換
- Java 浮點到字串轉換Java字串
- 計算出用字串表示的數學表示式的值 (轉)字串
- C語言“字串-數字”之間的轉換C語言字串
- 字串:怎樣將數字型別轉換為字串 (轉)字串型別
- 數值轉換為字元字元
- Swift3.0語言教程字串轉換為數字值Swift字串
- python中列表、字典和字串的互相轉換Python字串
- 利用符號進行的型別轉換,轉換成數字型別 ~~符號型別
- 將整數轉換成字串字串
- c++中字元、字串和數字間的轉換C++字元字串
- C語言中字串與整數的相互轉換C語言字串
- C#字串轉換為數字的4種方法C#字串
- javascript中將數字轉為字串的方法JavaScript字串
- cg 到hlsl的轉換
- MySQL字串中抽取數值的方法MySql字串