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"的标题和描述暗示了我们将会探讨如何在VC环境中对字符串进行基本的操作,如字符串的相加减、空串判断以及编辑框中的字符串管理。以下是对这些知识点的详细说明: 1. **字符串的相加减**: 在C++中,...
在这个主题中,我们将深入探讨`CString`类的各种操作,包括查找、插入、格式化和截取字符串。 **查找:** `CString`提供了多种查找方法,如`Find`、`FindOneOf`和`FindLastOf`。`Find`函数用于在字符串中查找指定的...
它接受一个双精度浮点数`t`和一个整数`n`作为参数,`t`代表要进行四舍五入操作的数字,而`n`则表示四舍五入到小数点后第`n`位。函数内部首先利用`n_hundred()`函数计算出10的`n`次幂,然后将其与`t`相乘,转换成整数...
int Calculate(string formula) 函数功能:输入一个字符串公式string formula,允许四则混合运算,然后输入公式中对应变量的取值,最后返回int类型计算结果。 变量的格式:必须由1位字母加1位数字组成,如a1、b2等...
2. 初始化数组边界:`dp[0][j]` 和 `dp[i][0]` 分别表示一个空字符串与字符串2的子串或字符串1的子串的编辑距离,它们等于对方字符串的长度,即需要进行相应数量的插入操作。 3. 遍历字符串1和字符串2的所有字符对...
常见的VC获取字符串长度的方法 在软件开发中,获取字符串长度是一个常见的操作,但是字符串长度的定义并不唯一,通常是指字符串中包含字符的数目,但有的时候人们需要的是字符串所占字节的数目。下面将介绍五种常见...
字符串转数字是指将字符串类型的数据转换为数字类型的数据,例如将字符串 "123" 转换为整数 123。这种转换在编程中非常常见,例如在用户输入验证、数据处理、算法实现等方面都需要进行字符串到数字的转换。 CRT ...
标题中的“VC6用浮点数取四舍五入取整好像有Bug”是指在Microsoft Visual C++ 6.0(简称VC6)这个古老的开发环境中,使用浮点数进行四舍五入取整操作时可能存在的问题。这个问题在更新的Visual Studio版本,如VS2005...
此外,还可以使用宽度指示符(如`%5d`,表示至少占用5个位置的整数)和精度指示符(如`%.2f`,表示保留两位小数的浮点数)来控制输出的格式。 在本练习中,你需要编写一个程序,该程序接收一个数字和一个格式字符串...
C++字符串分割源码,破解版VC助手,兼容多个windows版本
它能够将任意长度的数据转化为固定长度的128位(16字节)摘要,通常以32位的十六进制数字表示。在VC 6.0环境下,MD5的实现通常涉及C++编程,涉及到Windows API调用或者使用第三方库如CryptoAPI或OpenSSL。 在标题...
4. `gcvt()`:这个函数用于将浮点数转换为ASCII字符串,支持四舍五入。用户可以指定要显示的小数位数。转换后的字符串会包括小数点和正负符号。转换后的结果存储在指定的缓冲区,并返回指向该缓冲区的指针。 5. `...
逗号分隔字符串,Vc 字符处理示例源码, 以逗号为分隔点,自由任意拆分字符串,经常编写代码的朋友可能会想到Split,对,本代码就是使用Split函数实现分隔字符串,这相当实用,在日常编程中,对字符串的截娶过滤与...
在编程领域,字符串逆转是一个常见的操作,特别是在C++或Visual C++(VC)环境中。本文将详细介绍如何使用VC来实现这个功能,同时提供一个友好的用户界面。 首先,我们需要理解字符串的基本概念。在C++中,字符串是...
本篇文章将详细介绍如何在VC中实现Ansi、Unicode和UTF-8字符串之间的相互转换,并且如何将这些字符串正确地写入文本文件。 #### Ansi与Unicode之间的转换 在VC中,进行Ansi到Unicode以及Unicode到Ansi的转换是非常...
在VC++编程环境中,我们经常需要处理不同进制之间的转换,比如将16进制的字符串转换成10进制的整数。16进制(Hexadecimal)是一种逢16进1的计数制,它使用数字0到9以及字母A到F来表示数值,而10进制是我们日常生活中...
在VC6 MFC环境下,开发过程中有时需要对数据进行安全性的校验,MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,能够将任意长度的数据转换为固定长度的摘要信息。这个标题提到的"VC6MFC md5计算 返回...