Вывод двух цифр в показателе порядка вещественного числа
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 15.12.15 11:36
Оценка:
Как в C++ вывести (на экран, в файл) вещественное число таким образом, чтобы количество цифр в показателе порядка было две, а не три?

Функция printf (fprintf) с использованием формата %.6le выводит на экран (в файл) шесть цифр (в данном случае) после запятой и три цифры после знака порядка (то есть, например, 1.234567e+000).
А можно ли сделать так, чтобы вместо 000 выводилось бы 00 (в данном примере), то есть чтобы вместо 1.234567e+000 выводилось бы на экран 1.234567e+00 ?
Как это сделать? Можно ли это сделать с помощью функции printf (fprintf) или же для этого надо использовать другие средства C++ ?
1613 г. = 2024 г.
Re: Вывод двух цифр в показателе порядка вещественного числа
От: watchmaker  
Дата: 15.12.15 11:54
Оценка: 2 (1)
Здравствуйте, RussianFellow, Вы писали:


RF>Функция printf (fprintf) с использованием формата %.6le выводит на экран (в файл) шесть цифр (в данном случае) после запятой и три цифры после знака порядка (то есть, например, 1.234567e+000).


Это implementation defined поведение. По стандарту в экспоненте не меньше двух цифр должно быть. То есть три — это допустимая реализация.
Хотя у меня что libstdc++, что libc++ выводят по две цифры по умолчанию. У тебя видимо что-то другое используется?

RF>А можно ли сделать так, чтобы вместо 000 выводилось бы 00 (в данном примере), то есть чтобы вместо 1.234567e+000 выводилось бы на экран 1.234567e+00 ?

RF>Как это сделать? Можно ли это сделать с помощью функции printf (fprintf) или же для этого надо использовать другие средства C++ ?

Универсально — разделить самому число на мантиссу и экспоненту (по аналогии с frexp, только с основанием 10) и выводить через printf два поля отдельно с любым форматированием.
Отредактировано 15.12.2015 13:00 watchmaker . Предыдущая версия . Еще …
Отредактировано 15.12.2015 12:03 watchmaker . Предыдущая версия .
Re[2]: Вывод двух цифр в показателе порядка вещественного чи
От: watchmaker  
Дата: 15.12.15 12:11
Оценка: 41 (3)
Здравствуйте, watchmaker, Вы писали:


W>Это implementation defined поведение. По стандарту в экспоненте не меньше двух цифр должно быть. То есть три — это допустимая реализация.


Поспешил и наврал. C++ ссылается в этом вопросе на C, а в C написано

The exponent always contains at least two digits, and only as many more digits as necessary to represent the exponent

То есть вывод трёх нулей в экспоненте запрещены в стандарте, ибо двух уже достаточно.

W>что libstdc++, что libc++ выводят по две цифры по умолчанию. У тебя видимо что-то другое используется?

Значит libstdc++ и libc++ работают верно, а твоя библиотека — нет :) Прикольно. Поиск говорит, что в msvc такой баг есть и даже предлагает решение.
Отредактировано 15.12.2015 13:33 watchmaker . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.