首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当从Python ctype调用并从Spyder或Pyzo运行时,strtod返回错误的值。

当从Python ctype调用并从Spyder或Pyzo运行时,strtod返回错误的值。
EN

Stack Overflow用户
提问于 2021-12-25 10:59:32
回答 1查看 36关注 0票数 0

我需要从Python脚本中调用一个C库,它将字符串解析为double并打印结果。

解析是否有效取决于我使用的IDE。我的操作系统是Debian 11,下面是一个很小的例子。

库(文件test.c):

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

void func(char * c){
    
    printf("Argument as string: %s\n",c);
    printf("Argument converted to double: %lf\n",strtod(c,NULL));
    
}

它是在一个终端中编译的,其中包括:

代码语言:javascript
复制
gcc -shared -o test.so -Wall test.c

Python脚本调用库并使用ctype(文件test.py)传递字符串参数:

代码语言:javascript
复制
# -*- coding: utf-8 -*-

import ctypes as ct

# Load the library
lib = ct.cdll.LoadLibrary("./test.so")

# Run my function
lib.func('356.5684'.encode('utf8'))

我从一个终端运行这个脚本

代码语言:javascript
复制
python3 test.py

我得到了

代码语言:javascript
复制
Argument as string: 356.5684
Argument converted to double: 356.568400

它如预期的那样工作。当我使用Eric-ide运行这个脚本时,它也能工作。但是,当我使用Spyder或Pyzo运行这个脚本时,我得到:

代码语言:javascript
复制
Argument as string: 356.5684
Argument converted to double: 356,000000

只有整数部分被转换,逗号被用作小数分隔符,而不是点。我怀疑是编码问题。我在Python中尝试了'356.5684'.encode('ascii'),但问题仍然存在。

你有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2021-12-25 14:39:37

谢谢KamilCuk。问题解决了。我在这里遵循了“标准”一节:https://wiki.debian.org/Locale

我生成了区域设置en_US.utf8,然后选择它作为默认设置。重新启动,现在转换从字符串到双重工作,甚至与Spyder和Pyzo。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70479552

复制
相关文章

相似问题

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