【发布时间】: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