首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有base参数的strtod

带有base参数的strtod
EN

Stack Overflow用户
提问于 2011-02-11 04:55:37
回答 2查看 376关注 0票数 1

我不想不必要地重新发明轮子,但我一直在寻找strtod的功能,但使用了一个基本参数(2,8,10,16)。(我知道strtoul允许基本参数,但我正在寻找返回类型double)。有什么正确方向的建议/建议吗?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-11 05:07:23

对于任意基,这是一个困难的问题,但只要你的基是2的幂,简单的朴素算法就会工作得很好。

strtod (在C99中)支持十六进制浮点数,其格式与C语言的十六进制浮点数常量相同。0x前缀是必需的,p分隔指数,指数以10为底,代表2的幂。如果你需要支持C99之前的库,你就没有这样的运气了。但既然你也需要基数2/4/8,那你最好还是自己动手吧。

编辑:朴素算法的大纲:

  1. 从初始化为0的浮点累加器变量(double或其他任何变量)开始。
  2. 从最左边的数字开始,直到基点,对于您处理的每个字符,将累加器乘以基数,然后将字符的值作为数字相加。
  3. 在基点之后,开始一个新的运行的place-value变量,最初是1/base。在处理的每个字符上,将位数值乘以位值变量,然后将位值变量除以基数。
  4. 如果您看到指数字符,请将其后面的数字作为整数读取,并使用标准库函数之一将浮点数按2的幂进行缩放。

如果你想处理潜在的四舍五入的形式,有太多的数字,你必须解决这个逻辑,一旦你超过了第二步或第三步中的有效位的数量。否则,你可以忽略它。

票数 2
EN

Stack Overflow用户

发布于 2011-02-11 05:02:06

不太可能--我从来没有见过浮点数在其他数基中被编码为“十进制”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4962573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档