C++ C+中的字符串到双精度转换+;

C++ C+中的字符串到双精度转换+;,c++,type-conversion,C++,Type Conversion,以下函数将字符串转换为双精度字符串,但精度不够 double stringToDouble(string s) { double d; stringstream ss(s); //turn the string into a stream ss >> d; //convert return d; } 使用stringToDouble(“31.2458782523”)调用时,输出为31.2459 如果不使用Boost库,有没有更好的方法?我想要更高的精

以下函数将字符串转换为双精度字符串,但精度不够

double stringToDouble(string s) {
    double d;
    stringstream ss(s); //turn the string into a stream
    ss >> d; //convert
    return d;
}
使用stringToDouble(“31.2458782523”)调用时,输出为31.2459


如果不使用Boost库,有没有更好的方法?我想要更高的精确度。尽可能高。

双精度解析正确,但您很可能看到的精度不正确。如何输出它?根据您的需要调整精度,这样就可以了


此外,您应该知道,浮点数字不能始终在内存中准确表示,因此在使用
float
double
s时,可能会出现(微小的)舍入错误。但是你通常可以安全地忽略这些,除非你计划向月球发射火箭。

双精度的解析是正确的,但是你很可能看到的精度是错误的。如何输出它?根据您的需要调整精度,这样就可以了

此外,您应该知道,浮点数字不能始终在内存中准确表示,因此在使用
float
double
s时,可能会出现(微小的)舍入错误。但是你通常可以安全地忽略这些,除非你计划向月球发射火箭。

如果你使用的是C++11,你可以使用

stod=S尝试D双倍

double myDouble = std::stod(myString);
这将提供相对适当的准确性

如果需要更高的精度,可以使用std::stold进行长双精度运算。

如果使用C++11,则可以使用

stod=S尝试D双倍

double myDouble = std::stod(myString);
这将提供相对适当的准确性


如果需要更高的精度,您可以使用std::stold进行长双倍运算。

输出就是这样,因为您没有相应地设置输出精度,而不是因为该方法不够精确。关于这一点有很多问题。@BenjaminLindley好吧,问题是OP不满意“输出”是31.2459,他们不满意是因为他们想要更高的精度。答案是,只要他们正确地打印出结果,他们当前的方法就可以给他们想要的所有精度。所以我倾向于认为它确实有帮助。@us2012:你是对的,我的错误。谢谢大家的评论。输出就是这样,因为你没有相应地设置输出精度,而不是因为方法不够精确。关于这一点有很多问题。@BenjaminLindley好吧,问题是OP不满意“输出”是31.2459,他们不满意是因为他们想要更高的精度。答案是,只要他们正确地打印出结果,他们当前的方法就可以给他们想要的所有精度。所以我倾向于认为它确实有帮助。@us2012:你是对的,我错了。谢谢大家的评论谢谢你的麦克风。因此,如果我对这些数字进行多次数学计算,它将仍然保持正确的精度水平(忽略微小的舍入误差)。在执行计算时,我还需要担心设置精度吗?@user1549727不,只要您使用
double
s,算法将以
double
精度进行。不过,请注意不要在中间步骤中将双精度数转换为浮点数或整数。酷。有道理。再次感谢,爱这个社区只是想澄清一下:是的,所有的计算都将以双精度进行,因为这是数据在内部存储的方式。但是当你输出它时,你可以使用任何适合你的精度。编译器负责执行总是尽力而为的算法:假设
intx
double y
,那么
x/y
将是
double
。但是要小心,
intx
inty
会导致
x/y
成为
int
,而这可能不是您想要的(例如
5/2==2
5./2=2.5
)。谢谢。因此,如果我对这些数字进行多次数学计算,它将仍然保持正确的精度水平(忽略微小的舍入误差)。在执行计算时,我还需要担心设置精度吗?@user1549727不,只要您使用
double
s,算法将以
double
精度进行。不过,请注意不要在中间步骤中将双精度数转换为浮点数或整数。酷。有道理。再次感谢,爱这个社区只是想澄清一下:是的,所有的计算都将以双精度进行,因为这是数据在内部存储的方式。但是当你输出它时,你可以使用任何适合你的精度。编译器负责执行总是尽力而为的算法:假设
intx
double y
,那么
x/y
将是
double
。但是要小心,
intx
inty
会导致
x/y
成为
int
,而这可能不是您想要的(例如
5/2==2
5./2=2.5
)。