जब मैं "2.01"
और "2.02"
लिखता हूं तो निम्न कोड मुझे अलग-अलग परिणाम क्यों देता है?बूस्ट :: lexical_cast और डबल - अजीब व्यवहार
#include <boost/lexical_cast.hpp>
#include <iostream>
#include <string>
int main()
{
const std::string str = "2.02";
try
{
const double b = boost::lexical_cast<double>(str) * 100.0;
std::cout << "double: " << b << '\n';
const int a = boost::lexical_cast<int>(b);
std::cout << "int: " << a << '\n';
}
catch (const std::exception& ex)
{
std::cerr << ex.what() << '\n';
}
}
आउटपुट
double: 202
int: 202
लेकिन अगर मैं "2.01"
करने के लिए "2.02"
बदलने यह मेरा पीछा उत्पादन देता है:
double: 201
bad lexical cast: source type value could not be interpreted as target
क्यों?
मैं विजुअल स्टूडियो 2013 (एमएसवीसी -12.0) का उपयोग कर रहा हूं और 1.57 को बढ़ावा देता हूं।
अग्रिम धन्यवाद।
समाधान इसे पहले दोगुना करने के लिए, और उसके बाद, सही होगा? – rubikonx9
क्या ओपी के कोड में संख्यात्मक रूपांतरणों के लिए 'lexical_cast' का उपयोग किया जा सकता है? क्या यह केवल स्ट्रिंग-जैसी प्रकार से रूपांतरणों के लिए डिज़ाइन नहीं किया गया है? –
@ g.tsh सं। समाधान दशमलव प्रतिनिधित्व या अभिन्न अंकगणित का उपयोग करना होगा। और इस तथ्य को न भूलें कि दशमलव प्रतिनिधित्वों में अभी भी सटीक सीमाएं हैं (जैसे 10/3 = 3.333333 ...) – sehe