увеличить лексическую последовательность удвоения

Я столкнулся с проблемой конверсии, для которой мне нужна ваша помощь. Я использую компилятор gcc4, и я довольно ограничен в использовании gcc4.

Я хочу преобразовать std :: string в double.

std::string aQuantity = aRate.getQuantity();
std::string aAmount = aRate.getAmount();

// aAmount = "22.05"
double dQuantity = boost::lexical_cast<double>(aQuantity);
double dAmount = boost::lexical_cast<double> (aAmount);

// dAmount =  22.050000000000001

Кстати я тоже пробовал atof и у меня все еще та же проблема. Есть ли способ использовать istringstream с setprecission(2) чтобы получить правильное значение, показанное aAmount?

5

Решение

Из-за природы значений с плавающей запятой 22.050000000000001 является ближайшим значением к 22.05, которое может быть сохранено. То же самое произойдет, если вы просто попытаетесь сохранить 22.05 в двойном формате, а затем распечатать его.

Вы должны установить точность выходного потока, если вы хотите напечатать 22.05. В качестве альтернативы вы можете исследовать рациональную библиотеку чисел (например, Boost.Rational). Это позволит точно хранить значение 22,05, в отличие от двойного (или с плавающей точкой).

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector