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