【问题标题】:C++ function call order (boost) - confused [duplicate]C ++函数调用顺序(增强)-困惑[重复]
【发布时间】:2013-02-09 15:46:51
【问题描述】:

我遇到了一个小 C++ 问题。首先,“我的”语言是 Java,所以我是 C++ 新手。 我有这个功能:

double readableDouble( double input )
{
    return   (int)(input*100+0.5)/100.0;
}

如您所见,没什么特别的。现在我从另一个函数(在同一个类中)调用该函数:

        cout << readableDouble(4434.21121131234323243) <<endl; // result: 4434.22 all okay
        cout << readableDouble(tempTrack.getLenght()/1000.0); // result: 30.56 all okay
        string lenght = boost::lexical_cast<string>(readableDouble((tempTrack.getLenght()/1000.0))); // result 30.55999999999982. expected: 30.56

getLenght() 返回一个双精度值。 (两次调用相同的两倍)

我不太确定这是怎么回事?

.

【问题讨论】:

  • 你期望什么输出?
  • 哦,应该也是30.56。
  • 也许你会发现this很有用
  • 与您的问题无关,但拼写为“长度”。
  • 谢谢(你可能注意到我不是母语人士);) - 年份,但应该没有四舍五入的问题。两个示例之间的唯一区别是 lexical_cast 的调用

标签: c++ visual-studio visual-c++ boost rounding


【解决方案1】:

From another post(归功于Mic):

来自boost lexical_cast的文档:

对于更多涉及的转换,例如精度或格式 需要比默认行为提供的更严格的控制 lexical_cast,推荐使用传统的字符串流方法。 如果转换是数字到数字, numeric_cast 可能会提供 比 lexical_cast 更合理的行为。

例子:

#include <sstream>

    #include <iomanip>

    int main() {
        std::ostringstream ss;
        double x = 5;
        ss << std::fixed << std::setprecision(2);
        ss << x;
        std::string s = ss.str();
        return 0;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 2016-04-29
    • 2011-05-18
    相关资源
    最近更新 更多