2015-01-23 2 views
0

Привет, ребята, я пытаюсь преобразовать вход пользователя в строку в строку и объединить с другой строкой, однако double не включает в себя .00 сзади. Например, если я вхожу в 72.98, он правильно распечатывает 72.98, но когда я вхожу в 72.00, он распечатывает только 72 без .00. Как я могу убедиться, что .00 есть.C++ coverting user input double в строку с десятичной цифрой

string desc, date; 
double amount; 
. 
. 
. 
cout << "Enter expenses amount: "; 
cin >> amount; 
//print to see the amount 
cout << amount << endl; 
. 
. 
. 
string amt; 
amt = static_cast<ostringstream*>(&(ostringstream() << amount))->str(); 

string input = desc + ":" + amt + ":" + date; 

Я попытался ниже код, но не работает, как хорошо, это дает некоторые смешные число

stringstream amtstr; 
amtstr << setprecision(2) << fixed << amount; 
cout << amtstr << endl;; 
+1

Определите «смешные номера». Кажется [работать на меня] (http://rextester.com/ERU96086) –

+0

@IgorTandetnik Если вы скопировали точный код, вы бы увидели [проблему] (http://ideone.com/uYvBVk);) – leemes

+0

Это должно работать 'std :: cout << std :: fixed << std :: setprecision (2) << amount << endl;' –

ответ

0

Поддерживает ли ваш компилятор std::to_string?

auto input = std::to_string(myDouble); 
if (input.find(".") == std::string::npos) { 
    input += ".00"; 
} 
else { 
    input = input.substr(0, input.find(".") + 3); 
} 
+1

Не работает для 72.1 –

+0

Теперь он работает с редактированием. :) Спасибо! – vincentp

+1

Я не вижу, как. Насколько я могу судить, это все равно произведет '72.1', а не' 72.10'. –

0

Вы можете использовать хорошее старое форматирование в стиле C.

char szBuffer[64]; 
sprintf(szBuffer, "%.2f", amount); 
std::string amt = szBuffer; 
+0

Публикация решения C на вопрос C++ (даже если код совместим с C++) не так хорош. Несмотря на этот факт, вы создаете переполнение буфера для больших чисел. См. Http://ideone.com/JucFmH – leemes

+0

Это очень хорошие моменты. Спасибо. – PDizzle745

1

Работает строковый подход. Вы просто не напечатать его содержимое, когда вы пишете

cout << amtstr << endl; 

Вместо этого этот код печатает сам stringsteam объект. Это определено для печати адреса с объекта, а не содержимого строки.

Вы можете получить доступ к содержимому строки с помощью функции str() члена, как:

cout << amtstr.str() << endl; 

Смотрите эту live demo.

+0

Я попытался положить .str(), и он не напечатал ни одного числа, просто пустую строку –

Смежные вопросы