概述
/**
* @param strValue: wstring going to be unified, return unified wstring
* @param amountType: amount type for unify 0-,. 1-. 2-NA 3-,
* @return true-normal false-error
*/
int CExSamples::unify_money(wstring& strValue, int amountType)
{
if(strValue.size() < 1)
return false;
wstring strOriValue = strValue;
wstring strPunct = L"";
wstring strNum = L"";
bool negative = false;
if(strValue[0] == L'-' || strValue[0] == L'_' || strValue[0] == L'一')
negative = true;
for(int i = (int)strValue.length() - 1; i >= 0; i--)
{
if(L'0' <= strValue[i] && strValue[i] <= L'9')
{
strNum = strValue[i] + strNum;
if(i - 1 >= 0 && (strValue[i-1] == L',' || strValue[i-1] == L'.'))
{
strPunct = strValue[i-1] + strPunct;
}
else
{
strPunct = L'n' + strPunct;//占位符
}
}
}
if(strPunct.length() > 0)
strPunct[0] = L'n';//删除在数字之前的符号
if(strPunct.length() != strNum.length())
return false;
if(strNum.length() < 1)
return false;
if(amountType == 0)
{//,.
int nDotPos = -1;
for(int i = (int)strNum.length() - 1; i >= 0 && i >= (int)strNum.length() - 3; i--)
{//在后三位中找点
if(strPunct[i] == L'.')
nDotPos = i;
}
if(nDotPos < 0)
{
for(int i = (int)strNum.length() - 1; i >= 0 && i >= (int)strNum.length() - 2; i--)
{//在后两位处找逗
if(strPunct[i] == L',')
{
strPunct[i] = L'.';//改为点
nDotPos = i;
}
}
}
int prePunct = (int)strNum.length();
int index = (int)strNum.length() - 1;
if(nDotPos > 0)
{
index = nDotPos - 1;
prePunct = nDotPos;
}
for(int i = index; i >= 0; i --)
{//处理逗号
if(strPunct[i] == L'.' || strPunct[i] == L',')
{
strPunct[i] = L',';//把自己改成逗号
prePunct = i;
}
if(prePunct - i >= 2)
{//补充逗号
if(i - 2 >= 0 && strPunct[i-1] != L',' && strPunct[i-1] != L'.' && strPunct[i-2] != L',' && strPunct[i-2] != L'.')
strPunct[i-1] = L',';
}
}
}
else if(amountType == 1)
{// .
int nDotPos = -1;
for(int i = (int)strNum.length() - 1; i >= 0 && i >= (int)strNum.length() - 3; i--)
{
if(strPunct[i] == L'.')
nDotPos = i;
}
if(nDotPos < 0)
{
for(int i = (int)strNum.length() - 1; i >= 0 && i >= (int)strNum.length() - 2; i--)
{
if(strPunct[i] == L',')
{
strPunct[i] = L'.';//改为点
nDotPos = i;
}
}
}
int index = (int)strNum.length() - 1;
if(nDotPos > 0)
{
index = nDotPos - 1;
}
for(int i = index; i >= 0; i --)
{//删除点号前的任何符号
strPunct[i] = L'n';
}
}
else if(amountType == 2)
{// NA
int nDotPos = -1;
for(int i = (int)strNum.length() - 1; i >= 0 && i >= (int)strNum.length() - 3; i--)
{
if(strPunct[i] == L'.')
nDotPos = i;
}
if(nDotPos < 0)
{
for(int i = (int)strNum.length() - 1; i >= 0 && i >= (int)strNum.length() - 2; i--)
{
if(strPunct[i] == L',')
{
strPunct[i] = L'.';//改为点
nDotPos = i;
}
}
}
int index = (int)strNum.length() - 1;
if(nDotPos > 0)
{
index = nDotPos - 1;
}
for(int i = index; i >= 0; i --)
{//删除点号前的任何符号
strPunct[i] = L'n';
}
strNum = strNum.substr(0, nDotPos);//删除.后的数字
strPunct = strPunct.substr(0, nDotPos);
if(strNum.length() != strPunct.length())
return false;
}
else if(amountType == 3)
{// ,
int nDotPos = -1;
for(int i = (int)strNum.length() - 1; i >= 0 && i >= (int)strNum.length() - 3; i--)
{
if(strPunct[i] == L'.')
nDotPos = i;
}
if(nDotPos < 0)
{
for(int i = (int)strNum.length() - 1; i >= 0 && i >= (int)strNum.length() - 2; i--)
{
if(strPunct[i] == L',')
{
strPunct[i] = L'.';//改为点
nDotPos = i;
}
}
}
int prePunct = (int)strNum.length();
int index = (int)strNum.length() - 1;
if(nDotPos > 0)
{
index = nDotPos - 1;
prePunct = nDotPos;
}
for(int i = index; i >= 0; i --)
{//处理逗号
if(strPunct[i] == L'.' || strPunct[i] == L',')
{
strPunct[i] = L',';//把自己改成逗号
prePunct = i;
}
if(prePunct - i >= 2)
{//补充逗号
if(i - 2 >= 0 && strPunct[i-1] != L',' && strPunct[i-1] != L'.' && strPunct[i-2] != L',' && strPunct[i-2] != L'.')
strPunct[i-1] = L',';
}
}
strNum = strNum.substr(0, nDotPos);//删除.后的数字
strPunct = strPunct.substr(0, nDotPos);
if(strNum.length() != strPunct.length())
return false;
}
wstring strUniValue = L"";
if(strNum.length() != strPunct.length())
return false;
for(int i = (int)strNum.length() - 1; i >= 0; i--)
{
strUniValue = strNum[i] + strUniValue;
if(strPunct[i] == L',' || strPunct[i] == L'.')
strUniValue = strPunct[i] + strUniValue;
}
if(negative)
strUniValue = L'-' + strUniValue;
strValue = strUniValue;
return true;
}
最后
以上就是高挑羽毛为你收集整理的金额格式转换(千分位、小数点等)的全部内容,希望文章能够帮你解决金额格式转换(千分位、小数点等)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复