数字的格式化

 string str;
 int nLastZero = strfmt.find_last_of('0'); //最后一个0的位置
 string unit = strfmt.substr(nLastZero+1); //单位
 int decplace = strfmt.find('.');   //小数点的位置
 int commaplace = strfmt.find(',');   //整句的位置
 

 if( decplace == -1 ) //没有小数点
 {
  ostringstream out;
  out << value;
  if( commaplace == -1 )
   str = out.str();
  else //有逗号
   str = FormatComma( out.str(), nLastZero - commaplace);
  str += unit;
  return str;
 }//endif 没有小数点的情况

 //格式字符串中有小数点的情况
 int declen = strfmt.substr(decplace, nLastZero - decplace).size() - 1;

 __int64 intPart = value / div; //整数部分
 __int64 decPart = value % div; //小数部分
 for( int i = 0; i < declen; ++i)
  decPart = decPart * 10;
 decPart = decPart / div;

 ostringstream out;
 int prec = std::numeric_limits<long double>::digits10;
 out.precision(prec);
 out << intPart << ".";

 if ( decPart == 0 )
 {
  string zeros(declen, '0');
  out << zeros;
 }
 else
  out << decPart;
 str = out.str();
 
 if( commaplace != -1 )
  str = FormatComma( out.str(), decplace - commaplace - 1);

 str += unit;
 return str;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值