1

我正在尝试将浮点数转换为字符串。我知道你可以使用 ostringstream 和 sprintf 等来做到这一点,但是在我正在工作的项目中,我试图使用我自己的函数来做到这一点(我正在创建自己的字符串类而不使用任何外部函数)。我不想要一个完美的表示,例如,我不介意这种情况发生在大数字或小数字上:1.0420753e+4,就像标准字符串流一样。

我知道浮点数是如何工作的(例如符号、指数、尾数)以及它们是如何以不同于它们显示的方式表示的(这就是为什么它很困难)。我知道这是可能的,因为 std c++ 库可以做到 - 我只是不知道自己该怎么

编辑:我已经创建了我自己的整数版本(将 int 转换为我自己的 CString 类)。

4

4 回答 4

4

首先,不要自己这样做。iOS 具有用于格式化浮点对象的标准 C++ 功能,我希望 Android 也有。

其次,不要自己这样做。很难做到没有舍入误差。执行此操作的技术已为人所知并已发布,您应该使用良好的参考资料,而不是您通常会在 Stack Overflow 上找到的算法。对此的经典论文是David M. Gay 的正确舍入二进制-十进制和十进制-二进制转换,这里是David Gay 的代码

于 2013-06-28T13:35:00.450 回答
2

简单方法:除以 10 直到值 ≤ 1。这为您提供了小数位数,您应该在其后打印.. .在, 和四舍五入之后,将您想要的每个数字乘以原始数字 10 。将结果整数字符串化,并插入..

于 2013-06-28T11:21:10.593 回答
0

使用 ostringstream -:

double d = 2.7818; 
std::ostringstream ss;
ss << d;
std::cout << ss.str() << std::endl;
于 2013-06-28T11:05:02.440 回答
0

嗯,如果您真的想重新发明自己的方轮,那么可能最简单的方法是将转换器从浮点数写入整数(您说您知道位模式的工作原理),或者甚至可能是 2 个整数 - 一个用于小数部分,另一个用于其余的,然后打印它们重用已经存在的代码

于 2013-06-28T11:08:23.230 回答