1

この数値を整数にキャストしようとしています。しかし、bad_cast 例外がスローされます。何が起こっているのかわかりません。

4

2 に答える 2

3

価値があるからです

-138.8468953457983248

整数ではありません。

それを浮動小数点値に変換する必要があります。

    int a = static_cast<double>("-138.21341535");
                 //     ^^^^^^   Cast to double
 // ^^^  You can assign double to an int

レキシカル キャストは、文字列内のすべての文字を使用しようとします。残っている場合は、悪いキャストです。上記を整数に変換しようとすると、「-138」と表示されますが、例外を生成するキャストバッファーに「.21341535」が残ります。

#include <boost/lexical_cast.hpp>

int main()
{
    std::cout << "Try\n";
    try
    {
        std::cout << boost::lexical_cast<int>("-138.8468953457983248") << "\n";
    }
    catch(boost::bad_lexical_cast const& e)
    {
        std::cout << "Error: " << e.what() << "\n";
    }
    std::cout << "Done\n";
    std::cout << "Try\n";
    try
    {
        std::cout << boost::lexical_cast<double>("-138.8468953457983248") << "\n";
    }
    catch(boost::bad_lexical_cast const& e)
    {
        std::cout << "Error: " << e.what() << "\n";
    }
    std::cout << "Done\n";
}

これ :

> g++ lc.cpp
> ./a.out 
Try
Error: bad lexical cast: source type value could not be interpreted as target
Done
Try
-138.847
Done
于 2013-10-18T18:30:47.583 に答える