我试图将此数字转换为整数。但是我得到了一个bad_cast异常。我不知道发生了什么事。boost :: lexical_cast <int>(“-138.8468953457983248”)抛出异常
回答
这是因为值
-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
你是说-138.8468953457983248太长?我只想要结果中的值-138。 – user758114
@ user758114:**否**。我说这不是一个整数。词法转换使用'operator >>'来读取字符串。当它打到不是一个整数的'.'时,它会停止阅读。如果缓冲区中还有任何东西,boost lexical_cast将会抛出。因为上面不是整数,所以有些东西留在缓冲区中。 –
boost::lexical_cast<int>
需要字符串/字符流参数。 根据您的要求,您可以使用静态转换。
int a = static_cast<int>(-138.21341535);
即时通讯使用字符串 – user758114
- 1. boost lexical_cast抛出异常
- 2. boost :: lexical_cast <>
- 3. 如何抛出提升不好的词法抛出异常
- 4. Boost序列化抛出std异常
- 5. boost :: asio在暂停时抛出异常
- 6. boost :: weak_ptr是否会抛出异常?
- 7. 魔术异常抛出抛出异常
- 8. 抛出异常抛出异常
- 9. 使用boost :: lexical_cast的<double>(串)
- 10. Boost lexical_cast <std::string>(int)MSVC 2008 bug
- 11. 重载操作符不抛出异常
- 12. 抛出异常不抛出
- 13. boost :: lexical_cast从字符串到字符的异常
- 14. 异常抛出异常
- 15. 抛出异常
- 16. 异常抛出
- 17. 抛出异常
- 18. 抛出异常
- 19. 抛出异常
- 20. 抛出异常
- 21. 抛出异常
- 22. 抛出异常
- 23. boost :: lexical_cast带正号
- 24. 升压lock_guard <提高::互斥>抛出异常EINVAL
- 25. std :: to_string,boost :: to_string和boost :: lexical_cast <std::string>有什么区别?
- 26. LLVM异常抛出
- 27. socket.connect抛出异常
- 28. 类抛出异常
- 29. os.getcwd()抛出异常
- 30. C++异常抛出
为什么你需要投呢?它已经是'int'了。 – juanchopanza
错误,它是一个字符串。 – user758114
@ user758114:请仅将代码复制粘贴到堆栈溢出。切勿重新输入任何内容。 – RichieHindle