如何判断一个字符串表示的是否是一个小数?

HowUCan 2003-08-19 10:30:40
用atof将字符串转换为double时,若字符串不是合法的小数,转换结果为0,并不报错。
怎么才能知道这个字符串是否是合法的小数?
...全文
278 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
bcpl 2003-08-20
  • 打赏
  • 举报
回复
// 需要OleAuto.h

BOOL IsNumeric(LPCTSTR lpszText)
{
double dVal;
WCHAR wBuf[80];
MultiByteToWideChar(CP_ACP, 0, lpszText, -1, wBuf, 80);
return SUCCEEDED(VarR8FromStr(wBuf, CP_ACP, 0, &dVal));
}
databasesql 2003-08-20
  • 打赏
  • 举报
回复
我比较同意 StdAfx(任杰) ( ) 的说法,如果对效率要求不高的话,完全可以通过C++运行时库中的atof和_ecvt,当然,其中还有很多细节问题要解决。
但如果数据来得比较频繁,而且运行速度对你来说很重要,就应该考虑自己去实现之样一个算法了。
balas 2003-08-20
  • 打赏
  • 举报
回复
for(int i = 0;i<str.GetLength();i++)
{
if(__isdigit(str[i])||str[i]=='E'||str[i]=='.')
continue;
else
break;

}
StdAfx 2003-08-20
  • 打赏
  • 举报
回复
如果采用现成的函数的话:思路如下
把这个字符串转换成一个数值,然后把这个数值转换成字符串,比较这两个字符串是否一样
HowUCan 2003-08-20
  • 打赏
  • 举报
回复
总有人写过现成的函数吧?
  • 打赏
  • 举报
回复
当结果为0 时
检测一下字符串是不是0
tonybaobao 2003-08-19
  • 打赏
  • 举报
回复
“用atof将字符串转换为double时,若字符串不是合法的小数,转换结果为0,并不报错”,就根据你这句,你判断它是否为0不就好了,你不会故意把你的小数设置成0的吧!
jack_wq 2003-08-19
  • 打赏
  • 举报
回复
字符串查找函数find找到小数点(ascii字符值46),后面有非零值极为小数!
HowUCan 2003-08-19
  • 打赏
  • 举报
回复
这也太简单了把,还有'E',还可能有多个'.', 多个'E', 还可能有+, -号,挺烦的。没有现成的?
ZhangYv 2003-08-19
  • 打赏
  • 举报
回复
字符串中每个字符都在'0'到'9'之间,除了'.'不允许其他字符出现.
fwbmail 2003-08-19
  • 打赏
  • 举报
回复
if (atof())
{
....
}
else
{
/* checkout '0'-'9' from the string
if not found ,than it's not a number */
}
HowUCan 2003-08-19
  • 打赏
  • 举报
回复
看来各位有点误会我的意思。我并不是要区分整数和小数。
我是有了一个字符串,这个字符串是别人传给我的,我需要校验它是否是一个数字(整数、小数都行),如果是数字就将其转换为一个double型数据。
紫郢剑侠 2003-08-19
  • 打赏
  • 举报
回复
查找是否有小数点.

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧