1

我的问题没有实际应用。我只是感兴趣。假设,我有一个双精度值,我想获得它的字符串表示,类似于printf函数。如果没有 C 运行时库,我将如何做到这一点?假设我使用的是 x86 架构。

4

3 回答 3

2

鉴于您声明您的问题没有实际应用,我认为您正在尝试学习浮点数表示。

因此,如果您正在寻找不使用任何库支持的解决方案,请从格式规范开始。从中您可以辨别各种“特殊”值(Infinity、NAN 等)以及解码/计算实际数值。一旦你有了有效数和指数,你就知道在哪里放小数点了。您必须编写自己的itoa类型例程。对于二的幂的基数,这可以像查找表一样简单。对于十进制,您必须做一些额外的数学运算。

于 2010-03-07T20:10:03.520 回答
0

您可以通过 (double % 10) 获取左侧的所有值,然后每次除以 10。他们将从右到左。

要获得点右侧的值,您必须乘以 10,然后乘以 (double % 10)。他们将从左到右。

于 2010-03-07T19:56:20.537 回答
0

如果您只想通过“足够接近”的结果来实现,请参阅我的文章http://www.exploringbinary.com/quick-and-dirty-floating-point-to-decimal-conversion/。它描述了一个使用浮点将浮点数转换为十进制数的简单程序,并解释了为什么这种方法对所有转换都不准确。(该程序不像 printf 那样进行小数舍入,但这应该很容易添加。)

于 2010-11-12T18:31:57.193 回答