【问题标题】:Is it possible to convert a float to double?是否可以将浮点数转换为双精度数?
【发布时间】:2019-09-09 19:42:53
【问题描述】:
我正在开发 TXT 到 SPC 转换器,某些值必须存储为双精度的十六进制,但 Python 仅适用于浮点数和 struct.unpack(‘<d’, struct.pack(‘<f’, value))/任何其他我能想到的解包和打包俄罗斯套娃娃娃不由于字节大小的不同而起作用。
SPC 库将 SPC 中的上述值解压缩为<d,并将它们转换为通过float() 浮动
我该怎么办?
【问题讨论】:
标签:
python-3.x
struct
floating-point
double
【解决方案1】:
我认为您可能对不同编程语言的命名策略感到困惑。
有一类数据类型称为“浮点数”。 IEEE-754 定义的两种浮点数类型是“binary32”和“binary64”。在 C 和 C++ 中,这两种类型分别公开为 float 和 double 类型。在 Python 中,仅原生支持“binary64”作为内置类型;它被称为float。
Python 的 struct 模块同时支持 binary32 和 binary64,并使用 C/C++ 的命名法来引用它们。 f 指定 binary32,d 指定 binary64。无论您使用哪个,该模块都会从 Python 的本机 float 类型(请记住,它是 binary64)打包和解包。在d 的情况下是准确的;对于f,它会在底层转换类型。您不需要欺骗 Python 进行转换。
现在,我只是假设您对“存储为双精度的十六进制”是错误的。我认为您的意思可能是“存储为双精度”——即文件中的 64 位——而不是存储为“双精度的十六进制”,即十六个人类可读的 ASCII 字符。后一种情况不会发生。
这就是说,如果你想将东西存储为二进制64,这只是struct.pack('d', value)的问题。