C ++将浮点数转换为字符串

时间:2013-06-28 11:01:08

标签: c++ string floating-point decimal ieee-754

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

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

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

4 个答案:

答案 0 :(得分:4)

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

其次,不要自己这样做。没有舍入错误很难做到。执行此操作的技术已知并发布,您应该使用良好的引用,而不是通常在Stack Overflow上找到的算法。这方面的经典论文是Correctly Rounded Binary-Decimal and Decimal-Binary Conversions by David M. Gay,这里是code from David Gay

答案 1 :(得分:1)

简单方法:除以10直到值≤1。这将为您提供打印.之前的小数位数。对于.之后所需的每个数字,将原始数字乘以10,然后舍入。对结果整数进行字符串化,然后插入.

答案 2 :(得分:0)

使用ostringstream - :

double d = 2.7818; 
std::ostringstream ss;
ss << d;
std::cout << ss.str() << std::endl;

答案 3 :(得分:0)

嗯,如果你真的想要重新发明你自己的方形轮,那么最简单的方法就是将转换器从float写入int(你说你知道位模式是如何工作的),或者甚至可能是2个int - 一个用于小数部分,其他的,然后打印他们已经存在的REUSING代码