当我将无符号的 8 位 int 转换为字符串时,我知道结果将始终最多为 3 个字符(对于 255),而对于有符号的 8 位 int,我们需要 4 个字符,例如“-128”。
现在我真正想知道的是浮点值是一样的。将任何“double”或“float”值表示为字符串所需的最大字符数是多少?
假设一个常规的 C/C++ 双精度(IEEE 754)和常规的十进制扩展(即没有 %e printf-formatting)。
我什至不确定真正小的数字(即 0.234234)是否会比真正的大数字(表示整数的双精度数)更长?
原文由 martin 发布,翻译遵循 CC BY-SA 4.0 许可协议
C 中的标准标头
<float.h>
或 C++ 中的<cfloat>
包含几个与浮点类型的范围和其他指标有关的常量。其中之一是DBL_MAX_10_EXP
,表示所有double
值所需的最大 10 次幂指数。由于1eN
需要N+1
数字来表示,并且可能还有负号,那么答案是这假设指数大于表示最大可能尾数值所需的位数;否则,也会有一个小数点后跟更多的数字。
更正
最长的数字实际上是最小的可表示负数:它需要足够的数字来覆盖指数和尾数。该值为
-pow(2, DBL_MIN_EXP - DBL_MANT_DIG)
,其中DBL_MIN_EXP
为负数。 It’s fairly easy to see (and prove by induction) that-pow(2,-N)
needs3+N
characters for a non-scientific decimal representation ("-0."
, followed byN
数字)。所以答案是对于 64 位 IEEE double,我们有