检查是否可以使用strtod将字符串转换为double

时间:2015-05-10 06:57:37

标签: c++

我需要检查字符串是否可以转换为double,字符串可以是

."36"(我不希望这个是双倍的),等等。

如果我使用下面的代码,它可以识别"36.5C"是一个字符串,这是我想要的,但它无法识别"36.5C"是双。如果我在"36"语句中删除"pEnd!=NULL",则该函数无法识别if是否为字符串。

"36.5C"

1 个答案:

答案 0 :(得分:3)

strtod会将pEnd设置为指向参与计算双精度的字符后的第一个字符。

输入“36.5C”实际上是:

'3', '6', '', '5', 'C', '\ 0'

其中'\ 0'表示字符串终止。

所以strtod会给你d = 36.5而p​​End会指向'C'。

因此,由于pEnd,你的if语句将给出true!= NULL

输入“36”实际上是:

'3', '6', '\ 0'

所以strtod会给你d = 36.0而pEnd将指向到'\ 0',即用于双精度的第一个字符。

因此,由于pEnd指向'\ 0',但是pEnd本身不是NULL,所以你的if语句将再次给出true,因为pEnd!= NULL。

也许你想要

*pEnd!='\0'   // note the *
在if语句中使用

来检查是否所有字符都用于转换。