1

我有一个字符串"1613894376.500012077",我想使用strtof它来转换为浮点数1613894376.500012077。问题是当我使用时,strtof我得到以下结果,小数点错位1.61389e+09。请帮我确定如何strof正确使用。

4

3 回答 3

4

一个典型 float的是 32 位,并且只能表示大约 2 32 个不同的值。“1613894376.500012077”不是其中之一。

“1.61389e+09”与“1613890000.0”是同一个值,代表一个float可以表示的接近值。

最接近float的 2 个是:

1613894272.0 
1613894400.0 // slightly closer to 1613894376.500012077

更精确地打印以查看更多数字。

于 2021-03-19T22:55:38.020 回答
1

小数点没有放错。符号“1.61389e+09”表示 1.61389•10 9,即 1,613,890,000.,小数点在正确的位置。

在您的计算机中的实际结果strtof可能是 1,613,894,400。这是 IEEE-754 binary32(“单一”)格式可以表示的最接近 1613894376.500012077 的值,也是float. 当您使用 打印时%g,默认情况下仅使用六位有效数字。要更精确地查看它,请使用 打印它%.999g

于 2021-03-19T23:01:33.720 回答
0

该数字1613894376.500012077是等价的(直到机器的精度与 相同的数字1.61389e+09。)e+09后缀表示小数点位于其放置位置的右九位小数位(或该数字乘以九次方10) . 这是计算机科学中一种常见的符号,称为科学记数法。

于 2021-03-21T16:09:04.893 回答