wie verhindert man, dass Zahlen in wissenschaftlichen Notationen angezeigt werden?

Wir haben einStreamBuffer Klasse, in der wir nicht implementiert habenstd::fixed operations und ich versuche zu verhindern, dass Zahlen in wissenschaftlichen Notationen angezeigt werden. Mit meinem folgenden Code werden einige Zahlen in wissenschaftlichen Notationen angezeigt. Wir möchten keine Zuweisungen vornehmen, deshalb haben wir @ implementierStreamBuffer Klasse aus Leistungsgründen.

Below ist der Code:

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 << "}";
        }
    }
}

Und so wird es genannt:

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);
}

Ich habe versucht, wie unten gezeigt zu verwenden, und ich habe einen Fehler erhalten, bei dem ich verstanden habe, dass wir @ nicht verwenden könnestd::fixed auf meinemStreamBuffer Klasse.

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

Was ist die Alternative zustd::fixed Ich kann hier was verwenden, das überhaupt keine Zuordnungen macht. Ich habe darüber nachgedacht, eine Zahl in eine Zeichenfolge umzuwandeln und dann @ anzuwendestd::fixed drauf, aber das wird auch einige Zuweisungen machen, die ich vermeiden will.

Was ist der beste Weg, um dies zu tun, der leistungsfähig ist und keine Zuweisungen vornimmt? Ich habe eine Lösung unten, aber es wird einige Zuweisungen vornehmen, da es Zeichenfolge verwendet. Ich kann die folgende Methode von meinem obigen Code aufrufen.

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

ibt es einen anderen optimierten und effizienten We

Antworten auf die Frage(6)

Ihre Antwort auf die Frage