| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Comodin Cdt

Registrado: 07 Mar 2011Mensajes: 21
|
Publicado: Mie 26 Mar, 2014 8:23 pm Asunto: Resultado diferente de una operacion en dos pc diferentes?? |
|
|
Hola..
Me dirijo a ustedes por que me ha surgido un inconveniente al que no logro encontrar respuesta..
Tengo un Float F cuyo valor es : F = 1.5317286253 y pretendo redondearlo..
En mi metodo primero conozco la posicion del punto decimal, implementando:
| Código: |
AnsiString Punto = ".";
int pos = (FloatToStr(F)).Pos(Punto)
|
y aqui es donde surge lo raro...
en un pc (antiguo) el resultado es 2 (correcto)
y en otros 2 PC recien comprados el resultado es 0 ???
Algun idea..
Gracias |
|
| Volver arriba |
|
 |
Comodin Cdt

Registrado: 07 Mar 2011Mensajes: 21
|
Publicado: Jue 27 Mar, 2014 11:47 am Asunto: |
|
|
He dado con el Problema : Al convertir el Float a String, en un pc el punto decimal seguia siendo punto y en los otros el punto decimal pasaba a ser coma, con lo cual la posicion del punto en la cadena era cero...
Gracias |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mie 02 Abr, 2014 10:06 am Asunto: |
|
|
| Comodin escribió: | He dado con el Problema : Al convertir el Float a String, en un pc el punto decimal seguia siendo punto y en los otros el punto decimal pasaba a ser coma, con lo cual la posicion del punto en la cadena era cero...
Gracias |
Para evitar eso puedes hacer una cosa: Forzar a que esos símbolos sean siempre iguales, independientemente de la máquina. En el arranque de la aplicación:
| Código: | WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
ShortDateFormat = "DD/MM/YYYY";
DateSeparator = '/';
ThousandSeparator = '.';
DecimalSeparator = ',';
CurrencyString = "¤";
CurrencyFormat = 3;
CurrencyDecimals = 2;
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
//--------------------------------------------------------------------------- |
_________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
Comodin Cdt

Registrado: 07 Mar 2011Mensajes: 21
|
Publicado: Lun 07 Abr, 2014 7:26 pm Asunto: |
|
|
| Gracias por tu tiempo.... Probare lo que me has recomendado.. |
|
| Volver arriba |
|
 |
Tor Master


Registrado: 22 Mar 2005Mensajes: 269Ubicación: obera, misiones, argentina
|
Publicado: Mar 08 Abr, 2014 10:32 pm Asunto: |
|
|
La diferencia creo que se debe a la configuración regional de las pc.
saludos jc _________________ Un experto es aquel que ya ha cometido todos los errores posibles en una materia muy concreta.
(Niels Bohr) |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Mie 09 Abr, 2014 6:28 pm Asunto: |
|
|
Como dice Angel, no es adecuado cambiar la configuración del PC.
No es muy adecuado usar float cuando queremos precisión matemática, es mejor usar double.
Para redondear un número puedes usar esta función que redondea hacia arriba o abajo según el valor del decimal en cuestión.
| Código: |
// F el el núnero a redondear y d el decimal sobre el que queremos el redondeo.
// Redondea hacia arriba o hacia abajo (0.5 hacia arriba; 0.4 hacia abajo)
double RoundTo(double F, int d)
{
double p = pow10(d);
return floor(F*p+0.5)/p;
}
|
| Código: |
RoundTo(0.5736, 3) // Da como resultado 0.574
RoundTo(0.5736, 2) // Da 0.57
|
Saludos. |
|
| Volver arriba |
|
 |
|