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