【问题标题】:string to double conversion in C++ [duplicate]C ++中的字符串到双重转换[重复]
【发布时间】:2013-02-25 06:31:21
【问题描述】:

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

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 库,有没有办法更好地做到这一点?我想要更高的精度。尽可能高。

【问题讨论】:

  • 输出是这样的,因为您没有相应地设置输出精度,而不是因为方法不够精确。 SO上有很多关于这个的问题。
  • @BenjaminLindley 好吧,问题是 OP 对“输出”为 31.2459 不满意,并且他们不满意,因为他们想要更高的精度。答案是他们当前的方法可以为他们提供他们想要的所有精度,只要他们正确打印结果双精度。所以我倾向于认为它确实有帮助。
  • @us2012:你是对的,我的错。
  • 感谢大家的cmets

标签: c++ type-conversion


【解决方案1】:

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

此外,您应该知道浮点数在内存中并不总是准确表示,因此在使用floatdoubles 时可能会出现(微小的)舍入错误。但你通常可以放心地忽略这些,除非你打算向月球发射火箭。

【讨论】:

  • 谢谢你的麦克风。因此,如果我对这些数字执行多次数学计算,而不是使用 SO,它仍然会保留正确的精度级别(忽略微小的舍入误差)。在执行计算时,我是否还需要设置精度?
  • @user1549727 不,只要您使用doubles,算法就会以double 精度进行。但请注意不要在中间步骤中将双精度数转换为浮点数或整数。
  • 酷。说得通。再次感谢,爱这个社区
  • 澄清一下:是的,所有计算都将以双精度进行,因为这是内部存储数据的方式。但是当你输出它时,你可以使用任何适合你的精度。编译器负责执行始终尽力而为的算术:假设int xdouble y,那么x/y 将是double。但要小心,int xint y 导致 x/yint,这可能不是您想要的(例如 5/2 == 25./2 = 2.5)。
【解决方案2】:

如果你使用 C++11,你可以使用std::stod

stod = S D ouble

double myDouble = std::stod(myString);

这应该提供相对不错的准确性。

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

【讨论】:

    猜你喜欢
    • 2011-06-12
    • 2014-06-20
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多