我只是想用标准格式编写数字(与科学记数法一样).
我已经阅读了无数的如何使用“setprecision(…)”和“fixed”来实现这一点的例子,但问题是数字的精确度在编译时是未知的并且用’setprecision进入保守估计(…)’留下了大量关于这个地方的多余的零.
这是我所追求的一个例子:
let: tau = 6.2831tau * 0.000001 -> 0.0000062831tau * 0.001 -> 0.0062831tau -> 6.2831tau * 1000 -> 6283.1tau * 1000000 -> 6283100
目前我得到:
tau * 0.000001 -> 6.2831e-006tau * 0.001 -> 0.0062831tau -> 6.2831tau * 1000 -> 6283.1tau * 1000000 -> 6.2831e+006
我唯一能做的就是以某种方式提取double的指数,如果指数为正,则将’fix’的精度设置为零,否则将精度设置为’-1 * exp’;但这似乎是一种非常复杂的“关闭”科学记数法的方法.
谁知道更好的方法?
遗憾的是,在C(和C)中格式化的IO无法要求应用这些算法. printf的%g和IOStream的默认设置是最接近的可用,但是它们与固定和科学记数法之间的自动选择相结合,它们需要最大精度并且结束0的消除不是真的相同(它们作用于确切的十进制表示,他们不会试图找到最简单的一个).
请注意,这些算法并不简单,它们需要多精度算法.
总结以上是内存溢出为你收集整理的c – 如何防止ostringstream(或类似)在没有设置精度的情况下输出科学记数法全部内容,希望文章能够帮你解决c – 如何防止ostringstream(或类似)在没有设置精度的情况下输出科学记数法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)