c++ std::stod() 精度与C的strtod()不一致?
我尝试用C++重新写一遍教程,但是在解析JSON数字的时候, 使用std::stod()会在一些类似 1e-1000(underflow), 4.9406564584124654-e324 这样的数字上抛出std::out_of_range 的错误, 那如果C++写的话要和C实现的解析精度一样除了使用C标准库的strtod 还有没有别的方法? 还是说 像类似1e-1000(underflow), 4.9406564584124654-e324 这样的数字解析是不是应该返回 LEPT_PARSE_NUMBER_TOO_BIG ?
解析精度应该一样啊,因为std::stod()内部就是调用了strtod。
参考
抛出异常和使用错误码,不过是C++和C两种不同的处理方式。std::stod()把strtod中的错误码,包装成了异常,你去捕获异常,然后返回LEPT_PARSE_NUMBER_TOO_BIG就行了。
另外,发现,如果不包含 <stdlib.h>的时候,也能够编译执行,但是,strtod 函数的返回值是有问题的。
***c->json=[0], v->n=[0.000000] ***c->json=[-0], v->n=[1.000000] ***c->json=[-0.0], v->n=[1.000000] ***c->json=[1], v->n=[0.000000] ***c->json=[-1], v->n=[0.000000] ***c->json=[1.5], v->n=[0.000000] ***c->json=[-1.5], v->n=[0.000000] ***c->json=[3.1416], v->n=[0.000000] ***c->json=[1E10], v->n=[0.000000] ***c->json=[1e10], v->n=[0.000000] ***c->json=[1E+10], v->n=[0.000000] ***c->json=[1E-10], v->n=[0.000000] ***c->json=[-1E10], v->n=[0.000000] ***c->json=[-1e10], v->n=[0.000000] ***c->json=[-1E+10], v->n=[0.000000] ***c->json=[-1E-10], v->n=[0.000000] ***c->json=[1.234E+10], v->n=[0.000000] ***c->json=[1.234E-10], v->n=[0.000000] ***c->json=[1e-10000], v->n=[-1009459056.000000]