在C++中将字符串转换为带完整有效数字的浮点值[修复了在开发人员C++中工作的问题]

Convert string into float in C++ with full Significant figures [Fixed working in Dev C++]

本文关键字:C++ 开发 问题 工作 转换 字符串 有效数字      更新时间:2023-10-16

我想将包含数字浮点的字符串转换为具有完整有效数字的浮点或双数据类型值。请帮助我修复此

#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
*/

如果要控制精度,请包含#include <iomanip>并使用std::cout << std::setprecision(17);设置所需的位数。此外,float具有6个有效位的精度,而double具有12个有效位。因此,每当你的字符串的小数位数超过6位时,就有可能失去精度。

这里有两个问题:

  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个有效的十进制数字。