Python 根据模板编号将编号格式化为字符串
我想根据另一个模板/示例编号的精度显示一个编号 比如,拥有Python 根据模板编号将编号格式化为字符串,python,numbers,format,Python,Numbers,Format,我想根据另一个模板/示例编号的精度显示一个编号 比如,拥有示例号=0.0001并且能够格式化\u fp\u数字\u(示例号,另一个\u号);用另一个\u数字=10.12345我会得到10.1234 这就是我迄今为止所尝试的: 导入数学 def格式(模板编号、数字): n_digits=len(str(int(number))) 如果str中的“.”(模板编号): n_fp_digits=len(str(math.modf(模板编号)[0])。拆分(“.”[-1]) 其他: n_fp_位=0 fs
示例号=0.0001
并且能够格式化\u fp\u数字\u(示例号,另一个\u号)
;用另一个\u数字=10.12345
我会得到10.1234
这就是我迄今为止所尝试的:
导入数学
def格式(模板编号、数字):
n_digits=len(str(int(number)))
如果str中的“.”(模板编号):
n_fp_digits=len(str(math.modf(模板编号)[0])。拆分(“.”[-1])
其他:
n_fp_位=0
fs=“{:“+f”{n_位}.{n_位}f”+“}”
返回fs.format(数字)
断言格式\u fp\u数字\u like(0.0001,16.12345)==“16.1234”
断言格式\u fp\u数字\u类似(1,16.123)=“16”
断言格式\u fp\u数字\u like(0.1,8.5)=“8.5”
这很管用,但我觉得很笨拙。可能还有更好的方法?您也可以使用字符串格式:
def rounder(template_number, number):
return ('{0:.%sf}' % len(str(template_number).split('.')[-1])).format(number)
rounder(0.0001, 10.12345)
'10.1235'
这似乎有点脆弱!如果模板看起来像
“0.12e3”
,或者给定了“fail”
,该怎么办?为什么不使用常规的宽度
、精度
和类型
参数呢?@SamMason我有另一个数字作为“模板”,没有宽度、精度或类型。这就是我试图做的,或多或少,但我很累-谢谢你的回答。如果“template_number”是一个整数,我必须返回“int(number)”才能通过我的小测试套件;)我使用了if float(模板编号)。is_integer():返回int(编号)
,否则您的代码