首页 > 后端开发 > Golang > 正文

精度字段实际上如何与'fmt.Printf”中的'%g”一起工作?

Barbara Streisand
发布: 2024-10-26 01:27:02
原创
359 人浏览过

How Does the Precision Field Actually Work with `%g` in `fmt.Printf`?

fmt.Printf 对 %g 的宽度和精度字段的意外行为

理解不明确的文档

fmt.Printf 格式化字段的文档对于浮点值,声明:

“对于浮点值,宽度设置字段的最小宽度
,精度设置小数点后的位数,如果
适当,除了对于 %g/%G,它设置了总位数。"

令人困惑的部分在于最后一句中“it”的用法。它实际上指的是“精度”,而不是“宽度”。

%.9g 的真实行为

与 %.9g 应产生总共 9 位有效数字的直觉相反,它实际上只考虑小数点后的数字。

例如,123456.789 将被格式化为 123.4e 03,因为 %.9g 有效地截断任何前导零。

相反,0.0000012345 将被格式化为 1.2345 e-06 因为 %.9g 考虑小数点后的所有有效数字。

宽度和精度的影响

宽度字段指定整个格式化字符串的最小宽度,包括小数点点和指数(如果有)。

精度字段,如上所述,设置小数点后的有效位数。

对于 %g,精度字段覆盖宽度字段。但是,如果格式化字符串超过指定宽度,它将超出指定宽度。

给定示例的说明

回想一下,该示例涉及使用以下格式格式化以下浮点值.9克:

  • 0.0606060606060606
  • 0.333333333333333
  • 0.05
  • 0.4
  • 0.181818 1818181818
  • 0.0606060606060606:精度为 9 会截断前导零,得到 0.0606060606,适合 10 的宽度。
  • 0.3333333333333333:与第一个示例类似,生成的字符串 0.333333333 适合 10 的宽度。
  • 0.05:只有2位有效数字,0.05用空格填充以满足最小宽度10。
  • 0.4:与0.05类似,0.4也用空格填充以满足最小宽度10。
  • 0.1818181818181818:9 的精度导致 0.181818182,尾随 2 被向上舍入。该字符串的宽度在 10 以内。

以上是精度字段实际上如何与'fmt.Printf”中的'%g”一起工作?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板