【问题标题】:Convert string into float in C++ with full Significant figures [Fixed working in Dev C++]将字符串转换为具有完整有效数字的 C++ 中的浮点数 [在 Dev C++ 中固定工作]
【发布时间】:2016-04-04 09:44:43
【问题描述】:

我想将包含数字浮点数的字符串转换为具有完整有效数字的浮点或双精度数据类型值,请帮我解决这个问题

#include <sstream>
#include<iostream>
#include<string>
using namespace std;
int main()
{
string q = "23.3453535";
float f;
istringstream(q) >>f;
f=1.0*f;   // stack-overflow viewer it is an example because i want to process this float value 
cout<<f;
}

/*OutPut is:
23.3454
but i want this 
23.3453535
*/

【问题讨论】:

    标签: c++ string casting type-conversion double


    【解决方案1】:

    如果您想控制精度,请包含#include &lt;iomanip&gt; 并使用std::cout &lt;&lt; std::setprecision(17); 设置您想要的位数。 float 有 6 个有效位精度,而 double 有 12 个。因此,只要您的字符串在十进制中超过 6 位,就有可能失去精度。

    【讨论】:

    • 先生,我想要另一件事八进制转换成字符串,例如:Hello World 中的 110145154154157040127157162154144(图片已附上)i.stack.imgur.com/wXWyi.jpg
    • @UmairSajidMinhas:- 您需要为此提出一个单独的问题。也请分享你在这方面的努力!
    • @UmairSajidMinhas:- 对于这个我可以给你答案,res= std::to_string( std::stoi( yourOctal, 0, 8 ) ); }
    • 但是 stoi 在 DEV C++ 编译器中不工作你有什么建议我应该改变编译器或者你会给我另一个 dev c++ 代码?
    • @UmairSajidMinhas:- 开发 C++。我什至不确定我是否已经完成了 :(
    【解决方案2】:

    这里有两个问题:

    1. 您遇到了std::ostream 上浮点输出的默认格式,即 6 位数字。使用std::setprecision(n) 来提高精度以覆盖足够多的小数位。

    2. 您正试图从float 中获得比它所支持的更高的精度。 "23.3453535" 有 9 位长,因此每个数字有 3.3 位,大约需要 30 位来存储这个数字,并保留所有位。 (确切地说,您需要ceil(log(233453535)/log(2)),即 28)。 float 只有 23 位来存储尾数,所以当值在可表示的范围内时,一些最后的数字会消失。您可以通过使用double 而不是float 来解决此问题 - 但作为float,您永远不会得到9 个有效的十进制数字。

    【讨论】:

    • 是的,所以我将浮点数更改为双精度,但现在将字符串转换为双精度的代码是什么?
    • stringstream &gt;&gt; var 应该可以解决问题,那行不通怎么办?
    • 谢谢你的回答也对我有帮助:)
    猜你喜欢
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多