首先,我的背景是需要将浮点文字(字符串)转换为浮点/双精度值的编译器编写者。过去 15 年我没有做过任何浮点编程,所以我很确定这是一个完全愚蠢的新手问题。
double res;
errno=0;
*res = strtod((const char*)literal,NULL);
if (errno==ERANGE) throw_a_literal_out_of_range_exception();
return res;
但是c运行时库中没有“strtof”函数?
编辑:澄清一下。我已经知道字符串“literal”是 C 浮点的有效模式。它已经通过了正则表达式测试。我只是想检查是否存在范围/精度问题。
原因是用户可以在 Eiffel 源代码中编写
a := {REAL_32} 3.1415
b := {REAL_32} 3.0E200
将写入的浮点数显式转换为 32 位浮点数。我认为在第二种情况下,编译器应该检测到该值超出范围并引发错误或至少发出警告。
在 C89 中,您可以使用 sscanf。
例如:
float myfloat;
if(sscanf(str, "%f", &myfloat) != 1)
/* String could not be converted */
else
/* String was converted, myfloat is usable */
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)