我一直在研究一个脚本,它从Excel电子表格中获取数据,对数字进行舍入,并删除小数点,例如,2606.89579999999变为26069.但是,我需要将数字舍入到两位小数,即使存在一个尾随零,所以2606.89579999999应该变成260690.
我目前有它,所以i从Excel中的单元格中获取数据,并将其舍入到两个小数位(i = round(i, 2)),这给出了上面示例中的单个小数点.
我已经尝试弄清楚如何使用它Decimal,但我似乎无法让它工作.
所有其他数字得到舍入,如果舍入值不以'0'结尾,则可以正常工作round(i, 2),但如果数字恰好以*.x0结尾,则0会被丢弃并与数据混淆.
我用python编写了一个小程序,该程序使用带有tkinter文件对话框的xlrd将数据从.xls电子表格中拉出,以打开/保存文件。今天早些时候,该程序运行良好,但是我最近在笔记本电脑上安装了Autocad Electrical 2014才能正常工作,现在当我运行python脚本时,该脚本拉出对话框时出现以下错误:
log4cplus:ERROR No appenders could be found for logger (AdSyncNamespace).
log4cplus:ERROR Please initialize the log4cplus system properly.
log4cplus:ERROR No appenders could be found for logger (AdSyncNamespace).
log4cplus:ERROR Please initialize the log4cplus system properly.
Run Code Online (Sandbox Code Playgroud)
在此脚本起作用与出现错误之间,唯一发生过更改的是AutoCAD的安装。
这是怎么回事,如何避免呢?
我正在尝试从可以是int或float的文件中提取数据。我发现此正则表达式将从文件中提取这两种类型(\d+(\.\d+)?),但是我遇到的问题是它将浮点数分成两部分。
>>> import re
>>> line = "(gr_line (start 218.948 126.111) (end 218.948 143.637) (angle 90) (layer Edge.Cuts) (width 0.1) (tstamp 53D2B530))"
>>>
>>> print re.findall(r'\(start (\d+(\.\d+)?) (\d+(\.\d+)?)\)', line)
[('218.948', '.948', '126.111', '.111')]
>>>
Run Code Online (Sandbox Code Playgroud)
这样做的目的是获得由(start nn)定义的起始坐标,但是正如您所看到的,它需要218.948并将其拆分为218.948和.948。与相同的问题126.111。
如果输入字符串的起始括号中有一个整数,则得到以下信息:
>>> line = "(gr_line (start 218.948 126) (end 218.948 143.637) (angle 90) (layer Edge.Cuts) (width 0.1) (tstamp 53D2B530))"
>>> print re.findall(r'\(start (\d+(\.\d+)?) (\d+(\.\d+)?)\)', line)
[('218.948', '.948', '126', '')]
>>>
Run Code Online (Sandbox Code Playgroud)
这里的问题是增加了空索引-这不是一个大问题,但有点不方便。
我如何格式化我的正则表达式,使其捕获一个浮点数并返回该浮点数,或一个int并返回该int。