【问题标题】:How do I condition the format specifier on the value of the argument?如何根据参数的值设置格式说明符?
【发布时间】:2015-04-10 14:45:19
【问题描述】:

如果值高于 0.001,我想将值输出为 {:f},否则输出为 {:e}(指数)。

我想知道我是否可以在一个字符串格式化行中执行此操作,这不是以实际打印的行为条件,而是在它内部。是否允许 lambda 表达式? (旁注:它们在哪里被允许,真的吗?)

FTR,这是我的输出字符串:

print("{:f}".format(my_float))

【问题讨论】:

  • 注意最后的)
  • 你可以这样做:print(("{:f}" if my_float > 0.001 else "{:e}").format(my_float)),但这看起来有点尴尬!

标签: python python-3.x number-formatting


【解决方案1】:

将条件添加到格式中是我认为的一种方式

>>> x = 0.0001276
>>> '{:{type}}'.format(x, type='f' if x>0.001 else 'e')
'1.276000e-04'
>>> x = 0.01
>>> '{:{type}}'.format(x, type='f' if x>0.001 else 'e')
'0.010000'

在我看来,这比 lambda 更好。

要去掉if else,可以用and or操作

(x>0.01 and 'f') or 'e'

【讨论】:

    【解决方案2】:

    我想我会使用"{:g}"。这将根据值在指数表示法和普通浮点表示法之间来回切换:

    >>> '{:g}'.format(0.001)
    '0.001'
    >>> '{:g}'.format(0.0000001)
    '1e-07'
    

    与"{:e}" 相比,"{:e}" 总是指数级...

    >>> '{:e}'.format(0.001)
    '1.000000e-03'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-07
      • 2016-05-29
      • 2017-08-04
      • 2023-03-10
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      • 2012-12-28
      相关资源
      最近更新 更多