浮点数序列化/解析舍入疑问:为何解析后值与原值一致?
解答
你的预期是错误的,解析后的float值和原始值一致是正常现象,原因如下:
- 原始单精度float的精确十进制值是
0.111392557621002197265625,单精度float拥有24位有效二进制位,对应约7-8位可靠的十进制有效数字。 - 你序列化时向上舍入得到的字符串
0.111392558,和原始float值的差值小于float的最小精度单位(ULP)。stof在解析字符串时,会将其转换为最接近的float类型值,而这个最接近的值恰好就是你的原始float值。
换句话说,虽然舍入后的字符串有9位小数,但这个数值并没有超出原始float的精度覆盖范围,因此解析后会精准匹配到原始值。
内容的提问来源于stack exchange,提问作者perencia
相关产品推荐
相关产品推荐

