Как поменять "e+..." на знак степени "10^..."

95
26 декабря 2021, 06:00

Например у меня есть число

1e+14

оно выводится в консоль (cmd.exe) именно так

что я могу сделать, чтобы вместо того что выводится, выводилось вот такое число

1*10^14
Answer 1

В дополнение к ответу @ARHovsepyan - просто в комментарий не влезу...

Я бы брал опции форматирования из основного потока, т.е. писал бы примерно так:

struct e10
{ 
    double d;
    e10(double value):d(value) {}
};
std::ostream& operator <<(std::ostream& out, const e10& m)
{   
    std::ostringstream os;
    os.flags(out.flags());
    os.precision(out.precision());
    os.width(out.width());
    os.fill(out.fill());
    os << m.d;
    std::string s = os.str();
    size_t k = s.find('e');
    if (k != s.npos) {
        s.erase(k, 2);
        s.insert(k, "*10^");
    }
    return out << s;
}

Так мы можем выводить именно так, как нужно, не фиксируя точность или еще что-то и не передавая лишние параметры в класс - все параметры форматирования можно указывать в основном потоке.

Единственное - нужно разобраться, что делать с шириной, поскольку один символ e заменяется целыми четырьмя. Здесь возможны варианты - начиная от os.width(out.width()-3);...

Answer 2

Например так:

#include <iostream>
#include <iomanip>
#include <sstream>
struct My_Smanip { //не совсем манипулятор
    double d;
    My_Smanip(double value = 0)
             : d(value) {}
};
std::ostream&
operator <<(std::ostream& out, const My_Smanip& m)
{   
    std::ostringstream os;
    os << std::setprecision(2) << std::fixed 
        << std::scientific  << m.d;
    std::string s = os.str();
    size_t k = s.find('e');
    if (k != s.npos) {
        s.erase(k, 2);
        s.insert(k, "*10^");
    }
    out << s;
    return out;
}
int main() {
    std::cout << My_Smanip(pow(10, 14));
    return 0;
}
READ ALSO
c# конвертация кодировки

c# конвертация кодировки

Требуется программа которая будет текст из 1252 переводить в 1251

144
ADO.NET SCOPE_IDENTITY() Возвращает NULL

ADO.NET SCOPE_IDENTITY() Возвращает NULL

Что-то всё работало, а потом поломався! Данными база заполненаВсё работало

81
Смена сцены приводит к искажению виджета

Смена сцены приводит к искажению виджета

Когда выбираю в меню виджет интеграции с картами он выглядит так:

79
C# WPF Window открыть, после закрытия

C# WPF Window открыть, после закрытия

Есть класс производый от Window, который закрывается при помощи методаClose()

85