BOOL SHGlobal::isIntOrDecimal(CString strItem)
{
// 判断是否为整数或小数
// 返回 0 代表不是
// 返回 1 代表整数
// 返回 2 代表小数
if(strItem.IsEmpty())
return FALSE;
for(int i = 0; i <strItem.GetLength(); i++)
{
// check "+ "、 "- "
if(i == 0 && (strItem.GetAt(i) == 0x2B || strItem.GetAt(i) == 0x2D))
continue;
// check char
if( !isdigit(strItem.GetAt(i)) && strItem.GetAt(i) != '.')
return FALSE;
}
// check 小数点
if(strItem.Find( '.') != strItem.ReverseFind( '.'))
return FALSE;
return TRUE;
}
// tS 表示被操作的字符串
// tDecimalCount 表示需要保留的小数位数
// tRound 表示是否进行四舍五入操作
// addLenWhenLarger 表示四舍五入后超过当前长度的范围了是否增加位数
CString SHGlobal::strRound(CString tS, int tDecimalCount, boolean tRound, boolean addLenWhenLarger)
{
if(!isIntOrDecimal(tS))
AfxMessageBox(_T("非法数字不能进行格式化"));
int strLen = tS.GetLength();
int dotIndex = tS.Find('.'); // 小数点的位置
int i = 0 ;
if(dotIndex < 0 && tDecimalCount <= 0)// 本身是整数并且不需要小数位
{}
else if(dotIndex < 0 && tDecimalCount > 0) // 本身是整数,但需要增加小数位
{
tS += ".";
for(i =0 ; i < tDecimalCount; i++)
tS += "0";
}else if(dotIndex > 0 && dotIndex + tDecimalCount + 1 >= strLen)
// 本身有小数位但小数位数小于或等于需要保留的小数位
{
int tDots = (dotIndex + tDecimalCount + 1) - strLen;
for(i =0 ; i < tDots; i++)
tS += "0";
}else if(dotIndex > 0 && dotIndex + tDecimalCount + 1 < strLen){
// 本身有小数位并且小数位数大于需要保留的小数位,需要进行格式化
if(!tRound){
// 不需要四舍五入
tS = tS.Mid(0, dotIndex + tDecimalCount + 1);
}
else{
// 需要四舍五入
if(tS.GetAt(dotIndex + tDecimalCount + 1) < '5'){
// 保留小数位的后一位小于五
tS = tS.Mid(0, dotIndex + tDecimalCount + 1);
}else{
// 从最后位向前进行进位判断
tS = tS.Mid(0, dotIndex + tDecimalCount + 1);
boolean needtoAdd = TRUE; // 是否有进位
for(i = tS.GetLength() - 1; i >=0 ; i--){
if(needtoAdd){
char tCC = tS.GetAt(i);
if(tCC == '.')
continue;
tCC++;
if(tCC > '9'){
// 产生进位
tCC = '0';
tS.SetAt(i,tCC);
needtoAdd = TRUE;
}else {
needtoAdd = FALSE;
tS.SetAt(i,tCC);
break;
}
}
}
if(needtoAdd && addLenWhenLarger){
// 当第一位也需要进位时并且允许进位时
tS = "1" + tS;
}
}
}
}
return tS;
}
分享到:
相关推荐
高精度四舍五入的函数,的小函数,可以用c++和c语言进行编译。将小数后三位四舍五入到小数后两位 精确计算小于999999999999.999的数
VC写的查找字符串,修改字符串 可以通过查找关键字下面的关键字符串
VC各种字符串转换 CString string char * BSTR LPCSTR
int Calculate(string formula) 函数功能:输入一个字符串公式string formula,允许四则混合运算,然后输入公式中对应变量的取值,最后返回int类型计算结果。 变量的格式:必须由1位字母加1位数字组成,如a1、b2等...
VC字符串分割成数组.docVC字符串分割成数组.docVC字符串分割成数组.docVC字符串分割成数组.docVC字符串分割成数组.docVC字符串分割成数组.docVC字符串分割成数组.docVC字符串分割成数组.docVC字符串分割成数组.docVC...
C++字符串分割源码,破解版VC助手,兼容多个windows版本
能够进行字符串的相加减,判断是否为空串,并且能够将在编辑框中输入的字符串置空,实现编辑框内容的相关操作
将字符串逆序算法示例 VC CUI程序 字符串逆序算法示例 VC CUI程序 字符串逆序算法示例 VC CUI程序
VC实现字符串编辑距离计算,距离计算分为变换、删除、插入三种。
逗号分隔字符串,Vc 字符处理示例源码, 以逗号为分隔点,自由任意拆分字符串,经常编写代码的朋友可能会想到Split,对,本代码就是使用Split函数实现分隔字符串,这相当实用,在日常编程中,对字符串的截娶过滤与...
VC CString的常用操作,包括查找,插入,格式化,截取字串等,适合新手入门参考。
常见的VC获取字符串长度的方法[定义].pdf
四舍五入的函数的小函数,可以用c++和c语言进行编译。
这是一个进制转换的vc源码,将在字符串中16进制表示的数转换为10进制的整数
字符串转数字
VC CString 字符串处理函数的应用
VC统计字符个数,输入一段字符串,统计其个数
字符串排序VC6.0上通过,初学,使用的选择排序法,对输入的字符串进行排序输出。
VC字符串转换的常用方法,VC++ .net之间字符串的转换方法
VC与C++开发基础\实现查找、替换字符串