【问题标题】:Format Integer With Comma Using Python Printf使用 Python Printf 格式化带逗号的整数
【发布时间】:2020-07-11 01:22:16
【问题描述】:

我正在使用一个名为 streamlit 的third party package,其中一个 API 可以根据这个在浏览器中绘制一个滑块:

streamlit.slider(label, min_value=None, max_value=None, value=None, step=None, format=None, key=None)

我创建的滑块可以采用整数值(即 1,000,000 或 10,000 等),并且上面的这个函数有一个可选参数,可以使用 printf 格式化这个整数:

format (str or None) – A printf-style format string controlling how the interface should display numbers. This does not impact the return value. 
Valid formatters: %d %e %f %g %i

对于整数 1000000,我可以将 printf 样式格式设置为 format="%d",但我希望输出看起来像 1,000,000。鉴于可用的格式限制,我似乎无法弄清楚是否有办法实现这一点。

【问题讨论】:

  • 你能说明你是如何使用这个format参数的吗?
  • 您真的需要使用第三方软件包来完成工作吗?或者你对其他格式化方法没问题?
  • @Saimon, streamlit 不是为了那个。是一个用于构建机器学习和数据科学的库框架,可以在浏览器上查看并即时更新参数修改
  • 抱歉,printf 风格的格式不支持你想做的事情。

标签: python string printf streamlit


【解决方案1】:

您可以使用 python 中提供的 string.format() 方法来执行此任务。

【讨论】:

    【解决方案2】:

    如果你有big_number = 100000

    python 3.7 你可以这样做:

    print(f"{big_number:,d}")
    

    在旧版本中:

    print('{:,d}'.format(big_number))
    

    输出将是:

    100,000
    

    我假设您希望在 streamlit.slider()range 值上使用此行为。好吧,根据您在问题中所述的streamlit 文档:

    formatstrNone)——printf 样式的格式字符串控制如何 界面应该显示数字。这不影响退货 价值。有效格式化程序:%d%e%f%g%i

    所以,它似乎不支持整个printf 样式规范,只支持那些没有flags 的格式化程序。

    即使在python doc 使用str.format()时,他们必须设置一些标志来实现这一点:

    注意

    格式化数字时(intfloatcomplexdecimal.Decimalsubclasses) 与 n 类型(例如:'{:n}'.format(1234)),函数 临时将LC_CTYPE 区域设置为LC_NUMERIC 区域设置为 解码localeconv()decimal_pointthousands_sep 字段,如果他们 是非 ASCII 或长于 1 个字节,LC_NUMERIC 语言环境是 不同于 LC_CTYPE 语言环境。这种临时变化会影响 其他线程。

    这与answer一致

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 2019-12-17
      • 2014-05-31
      相关资源
      最近更新 更多