我正在尝试将浮点数转换为字符串。我知道你可以使用ostringstream& amp; sprintf等但是在我正在工作的项目中我正在尝试使用我自己的函数仅(我正在创建自己的字符串类而不使用任何外部函数)。我不想要一个完美的表示,例如我不介意,如果这种情况发生在大或小的数字:1.0420753e + 4与标准字符串流一样。
我知道浮点数是如何工作的(例如符号,指数,尾数)以及它们如何以与它们显示的不同的方式表示(这就是为什么它很难)。我知道这是可能的,因为std c ++库可以做到 - 我只是不知道该怎么做我自己。
编辑:我已经创建了我自己的整数版本(将int转换为我自己的CString类)。
答案 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)