当前位置: 首页 > news >正文

系部网站建设研究方案网页游戏制作软件

系部网站建设研究方案,网页游戏制作软件,网络营销课程是什么,搭建网站属于什么专业问题:python 在调用dll 的时候出现了精度问题 总结:使用decimal库进行转换就可以正常传递。 ‘ 心急的朋友可以略过下文了。 心急的朋友可以略过下文了。 心急的朋友可以略过下文了。 心急的朋友可以略过下文了。 ’ 遇到的问题具体情况 dll 生成函数…

问题:python 在调用dll 的时候出现了精度问题

总结:使用decimal库进行转换就可以正常传递。


心急的朋友可以略过下文了。
心急的朋友可以略过下文了。
心急的朋友可以略过下文了。
心急的朋友可以略过下文了。

遇到的问题具体情况

dll 生成函数代码声明如下

extern __declspec(dllexport) void LinearCompute(GoFloat64 currentX, GoFloat64 currentY, GoFloat64 targetX, GoFloat64 targetY, GoFloat64* resultX, GoFloat64* resultY);

使用python调用代码

from ctypes import *# c_double 声明c 双精度小数变量
result_x = c_double(0)
result_y = c_double(0)x_c = 1400.
y_c = 1450.
x_t = 1500.
y_t = 5600.# byref 调用指针
dll.LinearCompute(c_double(x_c), c_double(y_c), c_double(x_t), c_double(y_t), byref(result_x), byref(result_y))print(result_x.value, '  ', result_y.value)

但是输出的内容显示,输入到函数中的 x_c ,y_c 等数据对不上。

在这里插入图片描述

这里需要使用 decimal 库进行精度方面转换

所以以上代码改为如下:

from ctypes import *
from decimal import *result_x = c_double(0)
result_y = c_double(0)x_c = Decimal(1400)
y_c = Decimal(1450)x_t = Decimal(1500)
y_t = Decimal(5600)dll.LinearCompute(c_double(x_c), c_double(y_c), c_double(x_t), c_double(y_t), byref(result_x), byref(result_y))print(result_x.value, '  ', result_y.value)

然后运行的结果如下
在这里插入图片描述
可以看见 传入的数值变得正常了。

附:

这里搜了下 decimal 的说明,我把觉得比较常用的一些内容粘过来了。原文链接:https://blog.csdn.net/weixin_32487565/article/details/112950820

Decimal类型的优点

Decimal类型是在浮点类型的基础上设计的,但是它在几个地方上要优于floating point:

  1. Decimal类型可以非常精确地在计算机中存储,而学过c++的都知道,浮点型在计算机中是无法精确存储的,比如1.1和2.2在计算机中存储后,运算(1.1+2.2)表达式的值结果会是3.3000000000000003;Decimal类型则不会出现这种情况。同样,由于无法精确存储,浮点型也就无法精确计算(相对于Decimal类型),可以再测试(0.1+0.1+0.1-0.3)两种类型的计算结果。

  2. Decimal类型会自动保留小数点后面不需要的0,以与输入的精度相匹配,比如下面小程序中的例子:浮点型的1.20+1.30结果是2.5;而Decimal类型结果是2.50,这样貌似比较人性化。

  3. Decimal类型可以根据需要自己设置小数点后精度。通过getcontext().prec = x (x为你想要的精度来设置,getcontext()函数下面再详细介绍)。

  4. Decimal类型有很强的管理功能,它能够根据需要设置,来控制输出的格式,得到或者忽略某类错误(如除0,可以设置忽略它,而得到一个Infinity的Decimal值)。

比较重要的一点,如果使用 decimal 转换小数时,需要使用 单引号 引起来。

from decimal import *print(Decimal(1.1) + Decimal(3.3))
print(Decimal(1.1) - Decimal(3.3))
print(Decimal(1.1) * Decimal(3.3))
print(Decimal(1.1) / Decimal(3.3))#输出结果
'''
4.399999999999999911182158030
-2.199999999999999733546474090
3.630000000000000097699626167
0.3333333333333333781908292778
'''

在这里插入图片描述
但是如果使用字符串,就可以得到正常的结果了。







————————————————————底线————————————————————

http://www.yayakq.cn/news/439584/

相关文章:

  • 整站下载器 做网站地图网站运营seo招聘
  • 青白江建设局网站温州哪里有做网站的
  • php网站建设有关知识wordpress高亮代码转义
  • 合肥网站建设网站推广福田网站建设
  • 网站建设属于什么职位wordpress调用幻灯片
  • 建站专业定制广告传媒网站模板
  • 网络建设服务与网站运营推广网站制作语言
  • 如何做自己的在线作品网站广州市外贸网站建设
  • 做淘宝可以在别的网站发信息吗做网站怎么推广收益大
  • 做程序教程网站赚钱吗多店铺开源商城系统
  • 做网站的公司苏州微信登陆入口官网
  • 首页无法删除wordpresswordpress seo 标题
  • jsp网站开发好书高校网站站群建设公司
  • 奥派网站建设广州网站导航
  • 城乡村建设规划许可证网站wordpress删除历史文档
  • 一级做爰片软件网站wordpress图片不加载插件
  • 网站多套系统如何调用wordpress分类目录网站主题
  • 宁波网站建设电话咨询做网站需要多少钱卖片可以吗
  • 关于建设企业网站的请示网络营销专业学校排名
  • 用手机做空间建网站长沙微信小程序公司
  • python做网站吗wordpress数据怎么备份
  • 深圳的网站建设公司三把火那个网站做精防手机
  • 廊坊网站建设公司艺考培训
  • 免费建站有哪些宁波网络推广店
  • 怎么样制作网站友情链接交换要注意哪些问题
  • vm虚拟机搭建wordpressseo排名优化教程
  • 营销导向的网站建设的主要流程网站免费模板资源
  • 备案时暂时关闭网站网站建设柒首先金手指8
  • 河南建设教育中心网站虚拟主机怎么做网站
  • 网站换模板要怎么做wordpress带微信二维码