| 网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 |
![]() |
| Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道 |
| string do_fraction(long double value, int decplaces=3); |
| string do_fraction(long double value, int decplaces=3) 网管bitscn_com { int prec=numeric_limits<long double>::digits10; // 18 ostringstream out; out.precision(prec);//覆盖默认精度 out<<value; string str= out.str(); //从流中取出字符串 数值现在存储在str中,等待格式化。 |
小数点的位置
要进行格式化,首先要确定小数点的位置,如果小数位多于decplaces,do_fraction()会删除多余的。
要定位小数位,可使用string::find(),在STL算法中使用了一个常量来代表"数值未找到",在字符串中,这个常量为string::npos:
| char DECIMAL_POINT='.'; // 欧洲用法为',' size_t n=str.find(DECIMAL_POINT); if ((n!=string::npos)//是否有小数点呢? { //检查小数的位数 } |
| size_t n=str.find(DECIMAL_POINT); 网管网www_bitscn_com if ((n!=string::npos)//有小数点吗? &&(str.size()> n+decplaces)) //后面至少还有decplaces位吗? //在小数decplaces位之后写入nul str[n+decplaces]='\0'; |
| string temp=str.c_str(); str=temp; |
| string do_fraction(long double value, int decplaces=3) { ostringstream out; int prec= numeric_limits<long double>::digits10; // 18 out.precision(prec);//覆盖默认精度 out<<value; string str= out.str(); //从流中取出字符串 size_t n=str.find(DECIMAL_POINT); if ((n!=string::npos) //有小数点吗? && (str.size()> n+decplaces)) //后面至少还有decplaces位吗? { str[n+decplaces]='\0';//覆盖第一个多余的数 } str.swap(string(str.c_str()));//删除nul之后的多余字符 return str; } |
| void do_fraction(long double value, string & str, int decplaces=3); |
| cout << funct(123456789.69999001) << '\t' << funct(12.011)<<endl; |
网管下载dl.bitscn.com
|
0
|
评论加载中…