gpt4 book ai didi

c++ - double 到固定宽度的字符串转换

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:45:48 26 4
gpt4 key购买 nike

我想打印一个 double 值,到一个不超过 8 个字符的字符串中。打印的数字应尽可能多,例如

5.259675
48920568
8.514e-6
-9.4e-12

我尝试了 C++ iostreams 和 printf 风格,但都没有按照我希望的方式尊重提供的大小:

cout << setw(8) <<  1.0 / 17777.0 << endl;
printf( "%8g\n", 1.0 / 17777.0 );

给出:

5.62525e-005
5.62525e-005

我知道我可以指定一个精度,但我必须在这里提供一个非常小的精度,以涵盖最坏的情况。有什么想法可以在不牺牲太多精度的情况下强制执行精确的字段宽度吗?我需要这个来打印矩阵。我真的必须想出自己的转换函数吗?

5 年前有人问过类似的问题:Convert double to String with fixed width ,没有令人满意的答案。我当然希望在此期间取得了一些进展。

最佳答案

这看起来并不太难,实际上,尽管您不能在单个函数调用中完成。指数使用的字符数确实很容易预测:

const char* format;
if (value > 0) {
if (value < 10e-100) format = "%.1e";
else if (value < 10e-10) format = "%.2e";
else if (value < 1e-5) format = "%.3e";
}

等等。

只有定义 printf 行为的 C 标准坚持指数至少有两位数,所以它在那里浪费了一些。参见 c++ how to get "one digit exponent" with printf

合并这些修复将使代码变得相当复杂,尽管仍然没有自己进行转换那么糟糕。

关于c++ - double 到固定宽度的字符串转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23971070/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com