gpt4 book ai didi

c++ - 双值的 sprintf 格式化

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:16:32 25 4
gpt4 key购买 nike

我在 UNIX 中使用 sprintf()double 值转换为字符串时遇到一个特定问题。

例如我有两个值:

double a = 0.009984354523452;
double b = 0.01;

在转换时,我正在使用:

sprintf(somestringvar, "Double value : %.15f \n", a);
sprintf(diffstringvar, "Double value : %.15f \n", b);

转换为字符串。

我的问题是 'a',值打印正确,但对于 'b' 的值,在尾端附加了 0。请提供将“a”和“b”表示为精确值的任何常用方法。

最佳答案

打印 b 时得到零是因为您告诉 printf 打印小数点后 15 位 (%.15f),它会乖乖地这样做。要获得“精确”的东西,使用简单的 %g 可能会更好。


[根据最近的评论更新]

事情真的取决于你所说的“精确”是什么意思。如果确切地说,您的意思是“用户最初输入的内容”,那么 double 可能不是您的最佳选择。也许将值存储为字符串,然后在需要在计算中使用它时将其转换为 double 可能会奏效。一旦将基于文本的十进制数转换为 double ,它通常不再与文本完全相同。虽然 printf()ostream 会尽职尽责地打印出 double 包含的内容(有时它很幸运,它打印的内容看起来与原始值相同),但问题是double 本身不再具有实际的原始值。事实上,它从来没有。

或者,您可能更喜欢精确的数字实现,而不是像 double 那样本质上近似的东西。例如,MySQL 有 NUMERIC and DECIMAL以强制您提前指定整数和小数位数为代价的支持完美精度的类型。这叫做 arbitrary precision arithmetic并且有用于在 C/C++ 中执行此操作的库。

关于c++ - 双值的 sprintf 格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10328150/

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