我正在尝试用 C 编写一个解析器,它的部分工作是将一系列字符转换为 double 字符。到目前为止,我一直在使用 strtod,但我发现它非常危险,并且它无法处理数字位于缓冲区末尾且未以 null 终止的情况。
我想我会自己写。如果我有 a.b 形式的数字的字符串表示,我是否会认为我可以计算 (double)a + ((double)b/(double)10^n),其中 n 是数字b 中的数字?
例如,23.4563:
一个= 23 b = 4563
最终答案:23 + (4563/10000)
或者对于 IEEE 格式的 float ,这会产生不准确的结果吗?
最佳答案
要准确读取 float 是很困难的,因为有各种各样的问题必须仔细解决,而且很多人都没有做到。但是,这是一个已解决的问题。要开始,请参阅 How to read floating point numbers accurately, June 1990, by William D. Clinger .
我同意 Roddy 的观点,您最好将数据复制到缓冲区并使用现有的库函数。 (但是,您应该检查您的 C 实现是否提供了 float 字的正确舍入转换。C 标准不需要它,并且某些实现不提供它。)
关于c - 编写我自己的 float 解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15554494/