我有PyFloatObject
我要转换为C float
。但是,PyObjectFloat
仅提供双倍转换。我可以安全地将双精度投射到浮点数,或者是否有将PyObject
转换为float
的函数,即PyObject_AsFloat
。
答案 0 :(得分:2)
来自docs:
浮点数通常使用C中的
double
实现;
换句话说,Python float
类型只是一个C double
,因此没有神奇的Python函数可以将Python float
转换为C float
其他比C通常可用于将double
转换为float
。
答案 1 :(得分:0)
简短的回答是肯定的,只要你的双倍'将(相对于幅度)适合于“浮动”。但是,您可能需要将其四舍五入或将其截断为单精度。
使用IEEE 754浮点表示....
" float定义为IEEE 754单精度,double定义为双精度,long double定义为IEEE 754扩展精度或某种形式的四倍精度(如英特尔80位双扩展精度)在x86或x86-64平台上),否则双精度。以前,所有C90浮动操作都被定义为以双精度进行,随后舍入为单精度,以便在必要时存储结果。"
关于' 754引用的数据来自http://en.wikipedia.org/wiki/C99(维基百科上的c99 c规范说明),而它不是特定的python,IEEE 754是通用的,而不是c特定的)
你使用的是什么版本的python?您可能想要使用(来自https://docs.python.org/2/c-api/float.html)
double PyFloat_AsDouble(PyObject * pyfloat) 返回pyfloat内容的C双重表示。如果pyfloat不是Python浮点对象但具有 float ()方法,则首先调用此方法将pyfloat转换为float。失败时此方法返回-1.0,因此应调用PyErr_Occurred()来检查错误。
答案 2 :(得分:0)