我正在维护一个CJSON库,我需要知道SaveTf将用“%1.17g”格式字符串输出的最大字符数。目前我正在分配1100个字节(基于What is the maximum length in chars needed to represent any double value?),这看起来相当浪费。如果我理解正确,它不应该超过22个字符(1代表整数部分,1代表点,16代表尾数,4代表“e-XX”)。然而,浮点数的问题可能非常违反直觉,我不确定我是否遗漏了什么。我的推理正确吗?

最佳答案

继续评论,
%1.(在'.'之前的一个)指定最小字段宽度,它不限制可以显示的位数。如果位数超出字段宽度,则字段将展开。
对于gG转换说明符,17指定“有效位数的最大数”。此外,“如果转换后的指数小于-4或大于或等于精度,则使用样式e。”
e,e双参数四舍五入并转换为[-]d.ddde±dd样式,其中小数点前有一位数字
字符及其后的位数等于精度;
如果缺少精度,则取6;如果精度为
0,不显示小数点字符。E转换使用
字母'E'(而不是'e')来介绍指数。这个
指数总是至少包含两位数;如果值为零,
指数是00。
数字的最大数目将是:

'(+/-)' + 1 + '.' + 17 + 'e' + '(+/-)' + XXX + '\0' = 26-chars

XXX308的最大值)
一个32个字符的缓冲区就足够了。1100个字符的缓冲区没有问题。我宁愿10000字节太长,而不是1字节太短。

关于c - 对于任何 double 浮点数,可以用“%1.17g”格式打印的最长字符串是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49841039/

10-11 22:08
查看更多