std::fixed, std::scientific, std::hexfloat, std::defaultfloat
De cppreference.com
Definido en el archivo de encabezado <ios> | ||
std::ios_base& fixed(std::ios_base& str ); | (1) | |
std::ios_base& scientific(std::ios_base& str ); | (2) | |
std::ios_base& hexfloat(std::ios_base& str ); | (3) | (desde C++11) |
std::ios_base& defaultfloat(std::ios_base& str ); | (4) | (desde C++11) |
Modifica el formateo por defecto de salida de punto flotante.
1) Establece el campo
floatfield
del flujo str to fixed
como si se llamara a str.setf(std::ios_base::fixed, std::ios_base::floatfield).2) Establece el campo
floatfield
del flujo str to scientific
como si se llamara a str.setf(std::ios_base::scientific, std::ios_base::floatfield).3) Establece el campo
floatfield
del flujo str a fixed
y scientific
simultáneamente como si se llamara a str.setf(std::ios_base::fixed|std::ios_base::scientific, std::ios_base::floatfield). Esto habilita el formateo de punto flotante hexadecimal.4) Establece el campo
floatfield
del flujo str a cero, como si se llamara a str.unsetf(std::ios_base::floatfield). Esto habilita el formateo por defecto de punto flotante, que es distinto del fijo y del científico.Este es un manipulador de E/S, puede llamarse con una expresión tal como out << std::fixed para cualquier out
de tipo std::basic_ostream (o con una expresión tal como in >> std::scientific para cualquier in
de tipo std::basic_istream).
Contenido |
[editar]Parámetros
str | - | Referencia al flujo de E/S. |
[editar]Valor de retorno
str (Referencia al flujo después de la manipulación).
[editar]Notas
El formateo hexadecimal de punto flotante ignora la especificación de precisión del flujo, como se requiere por la especificación de std::num_put::do_put.
Estos manipuladores no afectan el análisis de punto flotante.
[editar]Ejemplo
Ejecuta este código
#include <iomanip>#include <iostream>#include <sstream> enumclass leyenda { titulo, medio, final }; void imprimir(constchar* texto, double num, leyenda ley){if(ley == leyenda::titulo)std::cout<<"┌──────────┬────────────────┬──────────────────────────┐\n""│ número │ manipulador │ representación │\n""├──────────┼────────────────┼──────────────────────────┤\n";std::cout<<std::left<<"│ "<<std::setw(8)<< texto <<" │ fixed │ "<<std::setw(24)<< std::fixed<< num <<" │\n"<<"│ "<<std::setw(8)<< texto <<" │ scientific │ "<<std::setw(24)<< std::scientific<< num <<" │\n"<<"│ "<<std::setw(8)<< texto <<" │ hexfloat │ "<<std::setw(24)<< std::hexfloat<< num <<" │\n"<<"│ "<<std::setw(8)<< texto <<" │ default │ "<<std::setw(24)<< std::defaultfloat<< num <<" │\n";std::cout<<(ley != leyenda::final?"├──────────┼────────────────┼──────────────────────────┤\n":"└──────────┴────────────────┴──────────────────────────┘\n");} int main(){ imprimir("0.0", 0.0, leyenda::titulo); imprimir("0.01", 0.01, leyenda::medio); imprimir("0.00001", 0.00001, leyenda::final); // NOTA; escoger clang for para salida correctadouble f;std::istringstream("0x1.8p+0")>> f;std::cout<<"El análisis de 0x1.8p+0 da como resultado "<< f <<'\n'; std::istringstream("0x1P-1022")>> f;std::cout<<"El análisis de 0x1P-1022 da como resultado "<< f <<'\n';}
Salida:
┌──────────┬────────────────┬──────────────────────────┐ │ número │ manipulador │ representación │ ├──────────┼────────────────┼──────────────────────────┤ │ 0.0 │ fixed │ 0.000000 │ │ 0.0 │ scientific │ 0.000000e+00 │ │ 0.0 │ hexfloat │ 0x0p+0 │ │ 0.0 │ default │ 0 │ ├──────────┼────────────────┼──────────────────────────┤ │ 0.01 │ fixed │ 0.010000 │ │ 0.01 │ scientific │ 1.000000e-02 │ │ 0.01 │ hexfloat │ 0x1.47ae147ae147bp-7 │ │ 0.01 │ default │ 0.01 │ ├──────────┼────────────────┼──────────────────────────┤ │ 0.00001 │ fixed │ 0.000010 │ │ 0.00001 │ scientific │ 1.000000e-05 │ │ 0.00001 │ hexfloat │ 0x1.4f8b588e368f1p-17 │ │ 0.00001 │ default │ 1e-05 │ └──────────┴────────────────┴──────────────────────────┘ El análisis de 0x1.8p+0 da como resultado 1.5 El análisis de 0x1P-1022 da como resultado 2.22507e-308
[editar]Véase también
Cambia la precisión de punto flotante. (función) |