擅长:python、mysql、java
<p>一个4字节的IEEE格式浮点数大约包含7位数字。您要做的是将<code>unpack</code>的结果舍入到总共7位。从那里,从float到string的普通Python转换将对您隐藏所有的浮点污点。</p>
<pre><code>def magnitude(x):
return 0 if x==0 else int(math.floor(math.log10(abs(x)))) + 1
def round_total_digits(x, digits=7):
return round(x, digits - magnitude(x))
>>> round_total_digits(struct.unpack('<f', '\x94\x53\xF0\x40')[0])
7.510202
>>> round_total_digits(struct.unpack('<f', '\x0C\x02\x0F\x41')[0])
8.938
>>> x = struct.unpack('<f', struct.pack('<f', 12345.67))[0]
>>> x
12345.669921875
>>> round_total_digits(x)
12345.67
</code></pre>
<p>请注意,如果您的数字不是由十进制数直接转换而来,而是计算的结果,则这可能会降低总精度。但不是很多。</p>