扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
string do_fraction(long double value, int decplaces=3); |
string do_fraction(long double value, int decplaces=3) { 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); 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; |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者