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
)。