как предотвратить отображение чисел в научных записях

У нас естьStreamBuffer класс, в котором мы не реализовалиstd::fixed операции, и я пытаюсь предотвратить появление числа в научных обозначениях. С моим приведенным ниже кодом некоторые цифры отображаются в научных обозначениях. Мы хотим избежать каких-либо распределений, поэтому мы реализовалиStreamBuffer класс по причине производительности.

Ниже приведен код:

T value = 0;

template<typename U> void process(U& buf, DataOption holder) const {
    if (holder == DataOption::TYPES) {
        switch (type_) {
        case teck::PROC_FLOAT:
            buf << "{\"float\":" << value << "}";
            break;
        case teck::PROC_DOUBLE:
            buf << "{\"double\":" << value << "}";
            break;
        default:
            buf << "{\"" << type_ << "\":" << value << "}";
        }
    }
}

И вот как это называется:

void HolderProcess::dump(std::ostream& os, DataOption holder) const 
{
    process<std::ostream>(os, holder);
}

void HolderProcess::dump(StreamBuffer& buffer, DataOption holder) const
{
    process<StreamBuffer>(buffer, holder);
}

Я попытался использовать как показано ниже, и я получил ошибку, из-за которой я понял, что мы не можем использоватьstd::fixed на моемStreamBuffer учебный класс.

case teck::PROC_DOUBLE:
    buf << "{\"double\":" << std::fixed << value << "}";

Какая альтернативаstd::fixed Я могу использовать здесь, который не делает никаких распределений вообще. Я думал о преобразовании числа в строку, а затем применитьstd::fixed на это, но это будет делать некоторые распределения, которые я хочу избежать этого.

Каков наилучший способ сделать это, который эффективен по производительности и не выполняет никаких распределений? У меня есть решение ниже, но он будет делать некоторые распределения, так как он использует строку. Я могу вызвать метод ниже из моего кода выше.

template <typename T> string str(T number)
   {
       std::ostringstream ss;
       ss << std::fixed << number;
       return ss.str();
   }

Есть ли другой оптимизированный и эффективный способ?

Ответы на вопрос(0)

Ваш ответ на вопрос