Ver Mensaje Individual
  #13  
Antiguo 05-07-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

La diferencia infinitesimal (0.1001 y 0,0100999999999942) se produce por que el número no es expresable en una fracción binaria exácta. Pero en la práctica, se reduce a un problema de visualización, podrías hacer:
Código PHP:
AnsiString formatDbl(const double nro, const int ndec)
{
  
AnsiString zeros = "0000000000000000000";
  if (
ndec > zeros.Length())
   throw 
Exception("Numero de decimales muy grande");

  
AnsiString res = "0." + zeros.SubString(0, ndec);
  return 
FormatFloat(res, nro-(int)nro);
} 
Ejemplo de uso:
Código PHP:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  
double nro = 110.0100999999999942;
  
AnsiString msg = formatDbl(nro, 4);

  
ShowMessage(msg);
} 
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita