【问题标题】:conversion from string to double with number greater than std::numeric_limit<double>::digits10从字符串转换为数字大于 std::numeric_limits<double>::digits10 的双精度数
【发布时间】:2012-10-18 21:56:19
【问题描述】:
std::string str = "12345679012.124678";
double back = boost::lexical_cast<double>( str );
std::string str2 =boost::lexical_cast<std::string>( back );

//here str2 is equal to str

即使数字的有效数字大于std::numeric_limit&lt;double&gt;::digits10(即15),这里没有丢失(即最终字符串=原始字符串)是否正常?

【问题讨论】:

  • 视情况而定。对于 17 位数字,可能没有损失。更重要的是,概率会增加(但总会有没有损失的值)。
  • @]ames:也许就像 unsigned char 一样,对于从 100 到 255 的值,即使 std::numeric_limit&lt;char&gt;::digits10 返回 2 也不会丢失?
  • 对于那个特定的值:是的,这很正常。一般来说,请参阅 James Kanze 的评论。
  • 查看损失的一种简单方法是输入一个包含所有9s (example) 的数字。

标签: c++ double type-conversion


【解决方案1】:

是的,这很正常。

std::numeric_limit&lt;double&gt;::digits10 指的是保证强制转换不会有损的最大位数。

这并不意味着使用比限制更大的数字造成损失,只是意味着损失的可能性增加。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多