`
落花虽有意
  • 浏览: 185635 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

vc将字符串表示的任意位数字进行小数位保留和四舍五入

阅读更多

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;

}
 
分享到:
评论

相关推荐

    VC四舍五入函数

    高精度四舍五入的函数,的小函数,可以用c++和c语言进行编译。将小数后三位四舍五入到小数后两位 精确计算小于999999999999.999的数

    VC查找字符串,修改字符串

    VC写的查找字符串,修改字符串 可以通过查找关键字下面的关键字符串

    字符串检测VC

    "字符串检测VC"的标题和描述暗示了我们将会探讨如何在VC环境中对字符串进行基本的操作,如字符串的相加减、空串判断以及编辑框中的字符串管理。以下是对这些知识点的详细说明: 1. **字符串的相加减**: 在C++中,...

    VC字符串处理

    在这个主题中,我们将深入探讨`CString`类的各种操作,包括查找、插入、格式化和截取字符串。 **查找:** `CString`提供了多种查找方法,如`Find`、`FindOneOf`和`FindLastOf`。`Find`函数用于在字符串中查找指定的...

    C语言四舍五入的函数

    它接受一个双精度浮点数`t`和一个整数`n`作为参数,`t`代表要进行四舍五入操作的数字,而`n`则表示四舍五入到小数点后第`n`位。函数内部首先利用`n_hundred()`函数计算出10的`n`次幂,然后将其与`t`相乘,转换成整数...

    VC++程序: 将字符串转换成公式并计算结果

    int Calculate(string formula) 函数功能:输入一个字符串公式string formula,允许四则混合运算,然后输入公式中对应变量的取值,最后返回int类型计算结果。 变量的格式:必须由1位字母加1位数字组成,如a1、b2等...

    VC实现字符串编辑距离计算

    2. 初始化数组边界:`dp[0][j]` 和 `dp[i][0]` 分别表示一个空字符串与字符串2的子串或字符串1的子串的编辑距离,它们等于对方字符串的长度,即需要进行相应数量的插入操作。 3. 遍历字符串1和字符串2的所有字符对...

    常见的VC获取字符串长度的方法[定义].pdf

    常见的VC获取字符串长度的方法 在软件开发中,获取字符串长度是一个常见的操作,但是字符串长度的定义并不唯一,通常是指字符串中包含字符的数目,但有的时候人们需要的是字符串所占字节的数目。下面将介绍五种常见...

    字符串转数字

    字符串转数字是指将字符串类型的数据转换为数字类型的数据,例如将字符串 "123" 转换为整数 123。这种转换在编程中非常常见,例如在用户输入验证、数据处理、算法实现等方面都需要进行字符串到数字的转换。 CRT ...

    VC6用浮点数取四舍五入取整好像有Bug,大家看一下

    标题中的“VC6用浮点数取四舍五入取整好像有Bug”是指在Microsoft Visual C++ 6.0(简称VC6)这个古老的开发环境中,使用浮点数进行四舍五入取整操作时可能存在的问题。这个问题在更新的Visual Studio版本,如VS2005...

    POINTERS ON C 第九章编程练习16按照指定的格式字符串对一个数字字符进行格式化

    此外,还可以使用宽度指示符(如`%5d`,表示至少占用5个位置的整数)和精度指示符(如`%.2f`,表示保留两位小数的浮点数)来控制输出的格式。 在本练习中,你需要编写一个程序,该程序接收一个数字和一个格式字符串...

    C++字符串分割函数+VC助手

    C++字符串分割源码,破解版VC助手,兼容多个windows版本

    经典的MD5字符串加密VC 6.0源码.rar

    它能够将任意长度的数据转化为固定长度的128位(16字节)摘要,通常以32位的十六进制数字表示。在VC 6.0环境下,MD5的实现通常涉及C++编程,涉及到Windows API调用或者使用第三方库如CryptoAPI或OpenSSL。 在标题...

    VC字符串转数字[总结].pdf

    4. `gcvt()`:这个函数用于将浮点数转换为ASCII字符串,支持四舍五入。用户可以指定要显示的小数位数。转换后的字符串会包括小数点和正负符号。转换后的结果存储在指定的缓冲区,并返回指向该缓冲区的指针。 5. `...

    逗号分隔字符串,Vc 字符处理示例源码.rar

    逗号分隔字符串,Vc 字符处理示例源码, 以逗号为分隔点,自由任意拆分字符串,经常编写代码的朋友可能会想到Split,对,本代码就是使用Split函数实现分隔字符串,这相当实用,在日常编程中,对字符串的截娶过滤与...

    用vc实现字符串逆转的功能

    在编程领域,字符串逆转是一个常见的操作,特别是在C++或Visual C++(VC)环境中。本文将详细介绍如何使用VC来实现这个功能,同时提供一个友好的用户界面。 首先,我们需要理解字符串的基本概念。在C++中,字符串是...

    VC中字符串之间的转换和写入文本

    本篇文章将详细介绍如何在VC中实现Ansi、Unicode和UTF-8字符串之间的相互转换,并且如何将这些字符串正确地写入文本文件。 #### Ansi与Unicode之间的转换 在VC中,进行Ansi到Unicode以及Unicode到Ansi的转换是非常...

    vc 16进制字符串转换为10进制的整数

    在VC++编程环境中,我们经常需要处理不同进制之间的转换,比如将16进制的字符串转换成10进制的整数。16进制(Hexadecimal)是一种逢16进1的计数制,它使用数字0到9以及字母A到F来表示数值,而10进制是我们日常生活中...

    VC6MFC md5计算 返回CString字符串

    在VC6 MFC环境下,开发过程中有时需要对数据进行安全性的校验,MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,能够将任意长度的数据转换为固定长度的摘要信息。这个标题提到的"VC6MFC md5计算 返回...

Global site tag (gtag.js) - Google Analytics