首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么pybind11会将双精度转换为整型?

为什么pybind11会将双精度转换为整型?
EN

Stack Overflow用户
提问于 2020-08-01 18:10:40
回答 1查看 138关注 0票数 1

我创建了.pyd文件:

代码语言:javascript
运行
复制
#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中调用它:

代码语言:javascript
运行
复制
import py_dll
num = 500
a = py_dll.add(num)
print ('python is typing: ', a)

它打印:

为什么数字变成了整型?我说的是22岁。我希望它是浮动的22.8722

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-01 18:19:14

此函数

代码语言:javascript
运行
复制
int add(int num)

接受int作为参数并返回int。“问题”不在于pybind。试试这个,看看:

代码语言:javascript
运行
复制
int main() {
    auto x = add(42);
    std::cout << "return value: " << x << '\n';
    std::cout << typeid(x).name() << std::endl;
}

如果函数应该返回一个float,则必须声明它返回一个float

代码语言:javascript
运行
复制
float add(int num)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63204053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档