为什么 pybind11 将 double 转换为 int?
Why pybind11 converts double to int?
我创建了 .pyd 文件:
#include <pybind11/pybind11.h>
#include <iostream>
#include <typeinfo>
namespace py = pybind11;
int add(int num) {
float a = 1.0;
for (int i = 0; i <= num; i = i + 1) {
a = (a + i)/a;
}
std::cout << "dll is typing: " << a << '\n';
std::cout << typeid(a).name() << std::endl;
return a;
}
PYBIND11_MODULE(py_dll, m) {
m.doc() = "pybind11 py_dll plugin"; // optional module docstring
m.def("add", &add, "Add function", py::arg("num"));
}
我从python调用它:
import py_dll
num = 500
a = py_dll.add(num)
print ('python is typing: ', a)
它打印:
为什么digit变成了int?我说的是 22。我希望它是 float 22.8722
这个函数
int add(int num)
接受一个 int
作为参数,return 接受一个 int
。 “问题”不在于pybind。试试看:
int main() {
auto x = add(42);
std::cout << "return value: " << x << '\n';
std::cout << typeid(x).name() << std::endl;
}
如果函数应该 return 一个 float
你必须声明它 return 一个 float
:
float add(int num)
我创建了 .pyd 文件:
#include <pybind11/pybind11.h>
#include <iostream>
#include <typeinfo>
namespace py = pybind11;
int add(int num) {
float a = 1.0;
for (int i = 0; i <= num; i = i + 1) {
a = (a + i)/a;
}
std::cout << "dll is typing: " << a << '\n';
std::cout << typeid(a).name() << std::endl;
return a;
}
PYBIND11_MODULE(py_dll, m) {
m.doc() = "pybind11 py_dll plugin"; // optional module docstring
m.def("add", &add, "Add function", py::arg("num"));
}
我从python调用它:
import py_dll
num = 500
a = py_dll.add(num)
print ('python is typing: ', a)
它打印:
为什么digit变成了int?我说的是 22。我希望它是 float 22.8722
这个函数
int add(int num)
接受一个 int
作为参数,return 接受一个 int
。 “问题”不在于pybind。试试看:
int main() {
auto x = add(42);
std::cout << "return value: " << x << '\n';
std::cout << typeid(x).name() << std::endl;
}
如果函数应该 return 一个 float
你必须声明它 return 一个 float
:
float add(int num)