【问题标题】:Formatting a parsable float literal格式化可解析的浮点文字
【发布时间】:2021-04-01 19:51:52
【问题描述】:

我需要使用 printf 格式输出浮点数,这样生成的字符串是有效的浮点字面量。由于数字是任意的,我使用%g 格式描述符,后跟f

这在一种特定情况下引发了一个问题:如果尾数为整数且未附加指数。在这种情况下,打印的数字既没有小数点也没有指数,导致非法常量。

例如

3.3                 3.3f        ok
3000000000000000.   3e+015f     ok
0.000000000000003   3e-015f     ok
3                   3f          nok

您发现处理这种极端情况的简单方法了吗?

【问题讨论】:

  • sooooooo %#g?但是这是要在以后编译还是应该是人类可读的?如果您希望人类可读,请使用%g。如果以后要在电脑上使用,不要使用%g,你会失去精度,使用%a
  • @KamilCuk:宾果游戏!
  • @KamilCuk:实际上必须是编译器可读的,而且对人类友好。我知道可能会降低准确性,但在我的上下文中这是无害的。
  • @KamilCuk:使用 %#g,尾随零被附加到整数。在一个理想的世界里,我宁愿不要。
  • trailing zeroes are appended to integer 将其写入字符串并自己删除零。

标签: c++ formatting


【解决方案1】:

如果尾数为整数且未附加指数。在这种情况下,打印的数字既没有小数点也没有指数

所以使用%#g 的替代形式。它总是会打印一个小数点分隔符,但它也会禁止从输出中删除尾随零。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多