在本文中,您将会了解到关于在Python中舍入一个数字,但保持零结尾的新资讯,同时我们还将为您解释在python中舍入一个数字,但保持零结尾的相关在本文中,我们将带你探索在Python中舍入一个数字,
在本文中,您将会了解到关于在Python中舍入一个数字,但保持零结尾的新资讯,同时我们还将为您解释在python中舍入一个数字,但保持零结尾的相关在本文中,我们将带你探索在Python中舍入一个数字,但保持零结尾的奥秘,分析在python中舍入一个数字,但保持零结尾的特点,并给出一些关于Python-人类的数字,带有字母数字,但在pyQt和__lt__运算符中、python命令行交互 引导用户输入一个数字、python如何输入一个数字、Python舍入问题需要将每个位数舍入一半的实用技巧。
本文目录一览:- 在Python中舍入一个数字,但保持零结尾(在python中舍入一个数字,但保持零结尾)
- Python-人类的数字,带有字母数字,但在pyQt和__lt__运算符中
- python命令行交互 引导用户输入一个数字
- python如何输入一个数字
- Python舍入问题需要将每个位数舍入一半
在Python中舍入一个数字,但保持零结尾(在python中舍入一个数字,但保持零结尾)
我一直在研究一个脚本,该脚本从Excel电子表格中获取数据,四舍五入并删除小数点,例如2606.89579999999变为26069。但是,即使有可能将数字四舍五入到两位小数尾随零,所以2606.89579999999应该变成260690。
我目前拥有它,因此i
可以从Excel中的单元格中获取数据,并将其四舍五入到小数点后两位(i = round(i,2)
),这在上述示例中为我提供了一个小数点。
我试图弄清楚如何使其与一起使用Decimal
,但似乎无法使其正常工作。
舍入后的所有其他数字(如果舍入后的值不以‘0’结尾)可以与一起使用round(i, 2)
,但是如果这些数字恰好以*
.x0结尾,则该0会掉落并与数据混淆。
答案1
小编典典在谈论尾随零时,这是一个关于字符串表示的问题,您可以使用
>>> "%.2f" % round(2606.89579999999, 2)''2606.90''
或使用具有format
功能的现代风格:
>>> ''{:.2f}''.format(round(2606.89579999999, 2))''2606.90''
并用replace
或删除点translate
(_
指的是python控制台中先前命令的结果):
>>> _.translate(None, ''.'')''260690''
请注意,此处不需要四舍五入,因为.2f
格式适用于相同的四舍五入:
>>> "%.2f" % 2606.89579999999''2606.90''
但是正如您提到的excel一样,您可能会选择滚动自己的舍入函数,或使用小数,因为float.round
浮点表示法会导致奇怪的结果:
>>> round(2.675, 2)2.67>>> round(2606.89579999999, 2)2606.89
用十进制使用量化:
>>> from decimal import *>>> x = Decimal(''2606.8950000000001'')# Decimal(''2606.8950000000001'')>>> ''{}''.format(x.quantize(Decimal(''.01''), rounding=ROUND_HALF_EVEN))''2606.90''
对于您的原始任务,它变为:
>>> x = Decimal(''2606.8950000000001'')>>> int((x*100).quantize(1, rounding=ROUND_HALF_EVEN))260690
四舍五入的原因是Decimal
:
>>> x = Decimal(2606.8950000000001)# Decimal(''2606.89499999999998181010596454143524169921875'') # internal float repr
Python-人类的数字,带有字母数字,但在pyQt和__lt__运算符中
我有数据行,希望将它们显示如下:
11a1a22399.91010a11100100ababaBAB
当我使用pyQt并且代码包含在TreeWidgetItem中时,我要解决的代码是:
def __lt__(self, otherItem): column = self.treeWidget().sortColumn() #return self.text(column).toLower() < otherItem.text(column).toLower() orig = str(self.text(column).toLower()).rjust(20, "0") other = str(otherItem.text(column).toLower()).rjust(20, "0") return orig < other
答案1
小编典典这可能对您有帮助。编辑正则表达式以匹配您感兴趣的数字模式。Mine将把包含的所有数字字段都.
视为浮点数。用于swapcase()
颠倒您的情况,以便排''A''
在后面''a''
。
更新 :改进:
import redef _human_key(key): parts = re.split(''(\d*\.\d+|\d+)'', key) return tuple((e.swapcase() if i % 2 == 0 else float(e)) for i, e in enumerate(parts))nums = [''9'', ''aB'', ''1a2'', ''11'', ''ab'', ''10'', ''2'', ''100ab'', ''AB'', ''10a'', ''1'', ''1a'', ''100'', ''9.9'', ''3'']nums.sort(key=_human_key)print ''\n''.join(nums)
输出:
11a1a22399.91010a11100100ababaBAB
更新
:(响应评论)如果您有一个类Foo
并且想要__lt__
使用_human_key
排序方案来实现,则只需返回_human_key(k1) <_human_key(k2)
;的结果即可。
class Foo(object): def __init__(self, key): self.key = key def __lt__(self, obj): return _human_key(self.key) < _human_key(obj.key)>>> Foo(''ab'') < Foo(''AB'')True>>> Foo(''AB'') < Foo(''AB'')False
因此,对于您的情况,您将执行以下操作:
def __lt__(self, other): column = self.treeWidget().sortColumn() k1 = self.text(column) k2 = other.text(column) return _human_key(k1) < _human_key(k2)
其他比较运算符(__eq__
,__gt__
等)将以相同的方式实现。
python命令行交互 引导用户输入一个数字
代码
以下代码将在命令行中,引导用户选择一个数字,并反馈用户输入的值
# -*- coding:UTF-8 -*-
"""
@author: dyy
@contact: douyaoyuan@126.com
@time: 2023/11/22 15:51
@file: 引导用户输入一个数字.py
@desc: xxxxxx
"""
# region 引入必要的依赖
import os
模块名 = ''DebugInfo''
try:
from DebugInfo.DebugInfo import *
except ImportError as impErr:
print(f"尝试导入 {模块名} 依赖时检测到异常:{impErr}")
print(f"尝试安装 {模块名} 模块:")
try:
os.system(f"pip install {模块名}")
except OSError as osErr:
print(f"尝试安装模块 {模块名} 时检测到异常:{osErr}")
exit(0)
else:
try:
from DebugInfo.DebugInfo import *
except ImportError as impErr:
print(f"再次尝试导入 {模块名} 依赖时检测到异常:{impErr}")
exit(0)
# endregion
看板: 打印模板 = 打印模板()
def 大于0小于120(内容: str or int) -> bool:
if not isinstance(内容, int):
内容 = str(内容 if 内容 else '''').strip()
if not 内容:
return False
elif not 内容.isdigit():
return False
else:
内容 = int(内容)
return 0 < 内容 < 120
用户年龄 = 交互接口类().发起文本交互(输入提示=''请输入您的年龄:'', 限定范围=大于0小于120, 画板=看板.副本)
if ''0'' == 用户年龄:
看板.消息(红字(''您拒绝输入年龄''))
else:
看板.消息(f''用户年龄是: {绿字(用户年龄)}'')
以上代码中:
- 我们准备了方法,用户判断用户的输入是否符合预期
- 然后我们向用户发起文本交互,将使用我们提供的方法判断是否符合预期
- 当用户输入 0 时,我们提示用户放弃了输入
- 当用户输入一个非整数或者非数字时,我们提示用户输入无效
- 当用户输入一个小于0的数字时,我们提示用户输入无效
- 当用户输入一个大于120的数字时,我们提示用户输入无效
- 当用户输入一个 (0,120) 的整数时,我们返回用户的输入
用户拒绝输入
当用户输入 0 并回车时,我们提示用户拒绝了选择,如下
用户输入了一个非整数或者非数字时
当用户输入非整数或者非数字时,我们提示用户输入无效,如下
用户输入一个小于0的数字时
当用户输入一个小于 0 的数字时,我们提示用户输入无效,如下
用户输入了一个大于120的数字时
当用户输入一个大于120的数字时,我们提示用户输入无效,如下
用户输入一个 大于0 小于120 的数字时
当用户输入一个 0-120 的数字时,我们反馈提示用户的输入,如下
小结
以上就是今天分享的引导用户输入一个数字的例子了,通过这种方法,我们可以在命令行中实现优良的交互体验,在保持命令行高效的同时,又保留了窗口界面的易用性,同时约束了用户输入的多变性。
python如何输入一个数字
在 python 中,通过 input() 获取用户输入的字符串,再使用 int() 或 float() 函数转换为数字类型。若输入为整数,可使用 int() 将其转换为整数,例如:number = int(input("请输入一个数字:"))。若输入为浮点数,可使用 float() 将其转换为浮点数,例如:number = float(input("请输入一个数字:"))。需要注意,非数字输入会引发 valueerror,int() 会舍去小数部分,而 float() 则包含小数部分。
Python 中输入数字
在 Python 中,使用 input() 函数从用户那里获取输入。该函数会读取用户在命令行的输入并将其作为字符串返回。要获取数字,需要将输入转换为数字类型。
方法:
-
使用 int() 函数:
立即学习“Python免费学习笔记(深入)”;
将输入字符串转换为整数,例如:
number = int(input("请输入一个数字:"))
登录后复制 -
使用 float() 函数:
将输入字符串转换为浮点数,例如:
number = float(input("请输入一个数字:"))
登录后复制
示例:
# 获取用户输入的数字并将其转换为整数 number = int(input("请输入一个数字:")) # 对输入的数字进行操作 print("您输入的数字是:", number) if number % 2 == 0: print("输入的数字是偶数。") else: print("输入的数字是奇数。")
注意事项:
- 如果用户输入的是非数字字符,则程序会引发 ValueError。
- 使用 int() 时,会将小数部分舍去。
- 使用 float() 时,可以获取包含小数部分的数字。
以上就是
Python舍入问题需要将每个位数舍入一半
如果有人有什么好主意
这个怎么样?在数学上,您实际上在做错事,试图将单个数字舍入到舍入点之后。
原因有一个原因,即四舍五入仅检查答案中您想要的最后一位之后的数字。
想法是使错误最小化,并根据所需位数选择最接近值。 64.060546875
最接近的四进制小数位值为64.0605
,如下表所示:
Value: 64.050546875 64.050546875
Round: 64.0505 64.0506
Error: 0.000046875 0.000053125
因此,64.0505
舍入后的值更接近于实际值。
我猜没有人知道我正在尝试执行ROUND_UP而不是ROUND_HALF_UP。这样可以解决我的问题。
关于在Python中舍入一个数字,但保持零结尾和在python中舍入一个数字,但保持零结尾的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Python-人类的数字,带有字母数字,但在pyQt和__lt__运算符中、python命令行交互 引导用户输入一个数字、python如何输入一个数字、Python舍入问题需要将每个位数舍入一半等相关内容,可以在本站寻找。
本文标签: