FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
float con coma (,) o punto (.)
Saludos
Hola comunidad, estoy realizando un programilla de la siguiente forma tengo dos edits en uno el usuario inserta un numero de tipo float, despues yo lo resto contra otro float que defino directamente dentro del codigo y asigno el resultado al segundo edit. El primer edit recibe el número y en su evento KeyPress hago lo siguiente Código:
void __fastcall TForm6::DBEdit9KeyPress(TObject *Sender, char &Key) { if(Key == '.') { Key = ','; } } En el evento Change lo siguiente Código:
void __fastcall TForm6::DBEdit9Change(TObject *Sender) { float a,b,c; b = Round(StrToFloat(Edit1->Text),2); c = 7.33; if (b == c) { DBEdit2->Text = "0"; } else { if (b > c) { MessageDlg("Upsss lo siento !!!!, el número A es mayor al numero B",mtInformation, TMsgDlgButtons() << mbOK, 0); } else { a = c - b; Edit2->Text = FloatToStr(Round(a,2)); } } } En conclusion : 1 En mi pc el separador decimal es la coma, de otra forma a error en la conversion. 2 En la otra pc el separador decimal es el punto. De otra forma da error. 3 Al asignar un valor en el codigo a la variable C tengo que hacerlo usando como separador decimal el punto sino tampoco en mi pc funciona o sea da error. Pregunta Cual es el separador decimal en c, el punto o la coma? P.D. Realmente no entiendo como puede funcionar bien el mismo codigo en una pc y en otra no. Gracias de antemano por su respuesta
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código. Cuando miras fijamente al abismo, este te devuelve la mirada oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_ oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_ oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_ oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_ oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_ ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_ ________________________________________________________________________________ Última edición por lmpadron fecha: 22-02-2012 a las 21:07:35. |
#2
|
||||
|
||||
Cita:
Revisá si te sirve este hilo Un saludo.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#3
|
||||
|
||||
Cita:
De paso el codigo funciona perfecto en mi maquina con la coma, pero no en la de el usuario que estoy probando, de paso si lo pongo con el punto le funciona perfecto al usuario pero a mi no me funciona. Lo que no entiendo es que quieres decir con esto: Cuando es que pasa por esa conversion, tengo que realizarla yo, quien es AUX ? Existe alguna forma de definir cual es el separador decimal interno para que no me de error al efectuar la conversion ?
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código. Cuando miras fijamente al abismo, este te devuelve la mirada oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_ oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_ oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_ oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_ oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_ ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_ ________________________________________________________________________________ |
#4
|
|||
|
|||
Obtencion de Input Locale
Te doy una solucion a tu problema, no es la mas optima para implementarla, pero te puede dar una idea para partir de ahi, algo mas formal.
Dejar que la aplicacion decida cuando aplicar "," o "." , lo cual dependera de que Input tenga el PC donde lo ejecutes. Para obtener el separador decimal utilizas NumberFormatInfo(No recuerdo como instanciarlo, pero sangoogle, siempre sabe todo), dependiendo de si te retorne una "," o "." operas en tu aplicacion. Saludos |
#5
|
|||
|
|||
Otra solucion
Cita:
Mediante un registry, puedes determinar cual es el decimal utilizado en la PC. Voy a implementarlo en codigo, para mi aplicacion. y posteo el codigo. Saludos |
#6
|
||||
|
||||
Cita:
Espero a que lo implementes y postees !!!
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código. Cuando miras fijamente al abismo, este te devuelve la mirada oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_ oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_ oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_ oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_ oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_ ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_ ________________________________________________________________________________ |
#7
|
||||
|
||||
Cita:
Cita:
Cita:
Código:
DecimalSeparator = '.'; // Si quieres que sea el punto DecimalSeparator = ','; // Si quieres que sea la coma |
#8
|
|||
|
|||
Solucion Optima y Viable
Cita:
El codigo para obtener cual es el decimal en una PC es el siguiente OJO: Incluyes la libreria #include <Registry.hpp> Para que no te de problema Código:
TRegistry *regKey = new TRegistry; regKey->Access =KEY_READ; regKey->RootKey = HKEY_USERS; regKey->OpenKey(".DEFAULT\\Control Panel\\International", true); mostrar->Caption = regKey->ReadString("sDecimal"); //mostrar es un label donde reflejo en cuestion cual es el valor regKey->CloseKey(); Saludos. |
#9
|
||||
|
||||
Hola.
Los valores actuales de los formatos de la configuración regional, también se pueden obtener consultando directamente las variables. Ejemplo: Código:
void __fastcall TForm1::Button1Click(TObject *Sender) { char const* MSGE = "Separador %s: [ %s ]"; ShowMessage( Format(MSGE, ARRAYOFCONST(("decimal ",DecimalSeparator))) +'\n'+ Format(MSGE, ARRAYOFCONST(("de miles",ThousandSeparator))) +'\n'+ Format(MSGE, ARRAYOFCONST(("de fecha",DateSeparator))) +'\n'+ Format(MSGE, ARRAYOFCONST(("de lista ",ListSeparator))) //... ); }
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#10
|
||||
|
||||
Cita:
Si el usuario tiene configurado el sistema para usar una coma como separador decimal y oprime un punto, es problema del usuario, tú no debes tratar de adivinar lo que él quería hacer, simplemente dejas que el sistema le marque el error: Cita:
En resumen, tu pregunta en este hilo ni siquiera debería darse. No lo digo por molestar, sino para enfatizar el hecho de que tu código no debería preocuparse por esto. // Saludos |
#11
|
||||
|
||||
Cita:
Sin embargo no veo mal que exponga sus dudas pues el tema es útil desde el punto de vista didáctico. Ha servido para que tanto lmpadron como otros en su situación, se den cuenta de la existencia de distintas configuraciones del separador decimal y otros, como bien apunta ecfisa, y de pié al sabio consejo de roman. Saludos. |
#12
|
||||
|
||||
Cita:
Después de leer tu post reuní a los futuros usuarios y los puse al tanto del asunto y todos estuvieron de acuerdo en que hiciera lo que fuera necesario para que sea mas simple y cómoda la inserción de los datos en la base de datos. Cita:
Cita:
Pues si, tenias toda la razón realmente no la había entendido pero después de revisarla he decidido hacer la conversión interna como indica ecfisa y asi no modificar las preferencias regionales de los usuarios de acuerdo al consejo de Román Cita:
Código:
void __fastcall TForm6::DBEdit9Change(TObject *Sender) { DecimalSeparator = '.' float a,b,c; b = Round(StrToFloat(Edit1->Text),2); c = 7.33; if (b == c) { DBEdit2->Text = "0"; } else { if (b > c) { MessageDlg("Upsss lo siento !!!!, el número A es mayor al numero B",mtInformation, TMsgDlgButtons() << mbOK, 0); } else { a = c - b; Edit2->Text = FloatToStr(Round(a,2)); } } } Quiciera agradecerles a todos los que me han ayudado a averiguar finalmente cual es el separador decimal en los float jamas imaginarme que estaba en el registro, eso explica porque el mismo código funcionaba perfecto en una pc y muy mal en otras. De paso he aprendido que existe DecimalSeparator para este tipo de casos. Gracia a todos por prestarme su ayuda y su tiempo
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código. Cuando miras fijamente al abismo, este te devuelve la mirada oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_ oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_ oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_ oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_ oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_ ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_ ________________________________________________________________________________ Última edición por lmpadron fecha: 23-02-2012 a las 16:28:26. |
#13
|
||||
|
||||
No creo que tenga caso colocar la asignación
Código:
DecimalSeparator = '.' // Saludos |
#14
|
||||
|
||||
Cita:
¿Viste que fácil y claro el código? Saludos! |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Convertir coma en punto | lucho1981 | SQL | 2 | 22-04-2009 23:47:06 |
Coma presionando punto.. | Delfino | Varios | 2 | 20-10-2007 11:47:11 |
cambiar el punto por la coma | carlosll | Varios | 6 | 12-04-2007 19:11:57 |
Sustituir punto por coma | Carlos Arevalo | Varios | 3 | 13-10-2005 23:19:40 |
xml punto coma | carlomagno | Varios | 2 | 06-09-2004 11:49:35 |
|