【发布时间】:2013-02-04 15:08:28
【问题描述】:
根据ios_base manipulators,在格式化没有指数表示法的浮点数(使用十进制数)时,我基本上可以在defaultfloat 和fixed 之间进行选择。
但是,我想选择 maximum precision,这会为许多数字(例如 1.)产生 a lot 尾随零的 fixed,但避免使用指数表示法。如果设置为defaultfloat,它将在大多数时间看起来正确,除非该值非常小,但不是0.。在这种情况下,默认表示会自行切换为科学记数法,这会破坏格式化输出的接收器(因为它不知道2.22045e-16 的含义。
那么,我怎样才能把我的馅饼也吃掉呢?也就是说,没有不必要的尾随零的非指数表示法。
注意:我没有测试defaultfloat 标志的效果,因为我的 gcc 似乎还没有实现该标志,但我认为它是默认设置,没有使用任何标志。我确实检查了fixed 标志,它的行为确实符合预期。
【问题讨论】:
-
当输出为 2.22045e-16 时,您究竟想打印什么?
0或0.00000000000000000222045[不确定我得到了正确数量的零,但假装它是......] -
@MatsPetersson:第二个。
-
如果值为 16.00001210121019,你想要的正是那个,但如果值为 16.5,你想要那个,对吗?我认为您最好编写自己的“浮点到字符串”。这并不难。
-
@MatsPetersson:是的,你是对的。但是,关于编写我自己的“从浮点数到字符串”……我讨厌重新发明轮子。特别是在这里,因为我认为这应该是浮点格式的默认情况。
-
好吧,正如你所注意到的。我正在寻找答案,但可能需要几分钟,因为我可能至少会通过它运行一些简单的东西......
标签: c++ floating-point string-formatting iostream