Страница 1 из 1
Как пользователься wstringstream?
Добавлено: 25 авг 2015, 06:48
Сионист
x=3.14
Код: Выделить всё
std::wstringstream buffer;
std::wstring Result;
buffer<<x;
buffer>>Result;
. Как получить незначащие ноли в конце до заданного количества разрядов, например, 3.1400000?
А если x=3.14e+20, то как получить не 3.14e+020, 3.1400000e+20? Может ли буква e в результате преобразования быть в верхнем регистре, или только в нижнем? Как принудительно заставить wstringstream выдавать результат с плавающей запятой, то есть чтоб при x=3.14e-2 получить не 0.00314, а 3.1400000e-2? Как принудительно заставить wstringstream выдавать результат с фиксированной запятой? Например, как при x=3.14e+20 получить 314000000000000000000?
Re: Как пользователься wstringstream?
Добавлено: 26 авг 2015, 11:33
Romeo
Это всё решается при помощи манипуляторов. Вот
ссылочка.
Re: Как пользователься wstringstream?
Добавлено: 26 авг 2015, 12:13
Сионист
С неё то я и начал. Но
Код: Выделить всё
std::wstring Result;
std::wstringstream Buffer;
Buffer.precision(8);
Buffer<<Value;
Buffer>>Result;
и
Код: Выделить всё
std::wstring Result;
std::wstringstream Buffer;
Buffer<<std::setprecision(8);
Buffer<<Value;
Buffer>>Result;
не значащие ноли не выводит.
Re: Как пользователься wstringstream?
Добавлено: 26 авг 2015, 18:50
Сионист
Код: Выделить всё
std::wstring Result;
std::wstringstream Buffer;
Buffer<<std::setprecision(8);
Buffer<<std::fixed;
Buffer<<Value;
Buffer>>Result;
Position=Result.find(L'.');
- тоже не то:
1. Не значащие ноли надо выводить и в мантиссе при плавающей запятой.
2. Надо задать количество знаков не после точки, а всего до и после точки.
3. С плавающей запятой должно выводиться всё, что удовлетворяет одному из двух условий:
3.1. Меньше +1, но больше -1 и при заданной точности не округляется ни до 1. с нолями, ни до -1. с нолями. Например, при заданной точности восемь знаков меньше +1, но больше -1 и при такой точности не округляется 8-ми знаков округляется ни 1.0000000, ни до -1.0000000.
3.2. При округлении количество знаков всё равно остаётся больше заданного. Например, при заданной точности восемь знаков число после округления до целых оказывается больше +99999999, или меньше -99999999.
Сразу за знаком порядка должен следовать не ноль, а другая цифра.
Re: Как пользователься wstringstream?
Добавлено: 11 окт 2015, 08:06
Decoder
Можно не ограничиваться одними лишь стандартными библиотеками. Ничто не мешает использовать сторонние библиотеки, у которых возможности по форматированию текста могут быть шире, чем в стандартных.
Вот к примеру функция форматирования строки в U++ Framework
http://ultimatepp.org/src$Core$Format$en-us.html
Re: Как пользователься wstringstream?
Добавлено: 15 окт 2015, 06:38
Сионист
И весь проект перекомпилить в промежуточный код этого фреймвока?
Re: Как пользователься wstringstream?
Добавлено: 15 окт 2015, 09:38
Romeo
Сионист писал(а):И весь проект перекомпилить в промежуточный код этого фреймвока?
У меня снова взрыв мозга от того, что читаю. Что именно ты подразумеваешь в данном случае под промежуточным кодом? Явно не то, что имеют в виду все, так как изначальный смысл этого термина неразрывно связан с интерпретаторами, которые здесь не наблюдаются.
Re: Как пользователься wstringstream?
Добавлено: 15 окт 2015, 10:26
Romeo
Конкретно по проблеме. Нас, оказывается, опять спасает гугл! Достаточно включить "научный" формат отображения чисел. Внимательно читаем пример, приведённый в статье для манипулятора
setw и много думаем (С).
Вот урезанный пример, решающий проблему:
Код: Выделить всё
#include <iostream>
#include <iomanip>
int main()
{
std::cout << std::setiosflags(std::ios_base::scientific);
std::cout << std::setw(10) << 3.14f << std::endl;
return 0;
}
Вывод программы:
3.140000e+000