Como usar coma en vez de punto para decimales en C++
En algunos países se utiliza la coma en vez del punto como separador de los números con decimales, por este motivo puede que usted desee transformar el punto en coma, también puede estar ante el caso donde desee transformar una coma ingresada por el usuario en punto por si acaso el usuario utilizara comas para números con decimales, para todo esto hay una solución aunque ha de tener en cuenta que son dos temas diferentes, a continuación le dejo con el código para hacer estos dos procedimientos y alguna especificación sobre su uso para que pueda adaptarlo a sus necesidades.
Transformar punto de números decimales en coma
#include <iostream>
#include <locale>
#include <cstdlib>
using namespace std;
struct coma : numpunct<char> {
char do_decimal_point() const { return ','; }
};
int main() {
cout.imbue(locale(cout.getloc(), new coma));
cout << "Ejemplo 1" << 50.73 << endl;
cout << "Ejemplo 2" << 27.72 << endl;
system("pause");
}
Primero hemos creado una estructura donde le pedimos que cambie el valor de do_decimal_point() que por defecto se utiliza un punto para separar los decimales de un numero, y lo hemos cambiado por una coma, luego cuando inicia la función main, creamos una sentencia donde indicamos que a partir de ahí cada vez que se detecte un punto dentro de un numero decimal este se imprimirá como una coma.
El problema está en que si intentamos ingresar una coma directamente entre los números nos lanzará un error el compilador, esto es lógico puesto que la coma está reservada como un operador binario con otros fines, el código anterior lo que hace es transformar el punto en coma al momento de imprimir números con decimales separados por punto, es solo para fines estéticos en caso que el usuario desee ver una coma en lugar de un punto.
Código para transformar coma en punto
Si usted lo que quiere es capturar un numero ingresado por el usuario y sospecha que este podría ingresar una coma, entonces lo que puede hacer es capturar la cifra en una variable de tipo string y posteriormente transformar esta variable a tipo float, pero antes de hacer esto deberá de cambiar la coma por un punto en la misma variable de tipo texto todo esto con una función llamada replace, con el siguiente código podrá realizar dicha operación nada mas adáptelo a sus objetivos.
#include <iostream>
#include <cstdlib>
#include <string> // Necesaria para usar variables tipo string
#include <algorithm> // Necesaria para utilizar la funcion replace
using namespace std;
string texto = "20,2";
float numero;
int main() {
replace( texto.begin(), texto.end(), ',', '.'); // Reemplazo las comas en caso que existan por puntos
numero = stof(texto); // Transformo variable string a variable float
numero = numero+10.5; // Hago una suma con otro numero decimal para comprobar que funciona
cout << numero << endl;
system("pause");
}
Nota: Tenga en cuenta que para utilizar la función "stof" necesita tener configurado su compilador o proyecto para que admita el estándar C++ 11 o superior, pues antes de C++ 11 no existía esta función, puede que ya su compilador esté configurado de lo contrario diríjase a "Projects", "Build options", "Flags" y marque cualquier casilla que diga C++ 11 o C++ 14, esto en caso de estar en Code blocks, en caso de otro IDE puede variar esto un poco.