fix buggy double2str()
This commit is contained in:
parent
57b30ad254
commit
6231ce5959
|
@ -89,10 +89,8 @@ wxString BOARD_ITEM::GetLayerName() const
|
||||||
std::string BOARD_ITEM::FormatInternalUnits( int aValue )
|
std::string BOARD_ITEM::FormatInternalUnits( int aValue )
|
||||||
{
|
{
|
||||||
char buf[50];
|
char buf[50];
|
||||||
|
|
||||||
double mm = aValue / IU_PER_MM;
|
|
||||||
|
|
||||||
int len;
|
int len;
|
||||||
|
double mm = aValue / IU_PER_MM;
|
||||||
|
|
||||||
if( mm != 0.0 && fabs( mm ) <= 0.0001 )
|
if( mm != 0.0 && fabs( mm ) <= 0.0001 )
|
||||||
{
|
{
|
||||||
|
@ -101,6 +99,9 @@ std::string BOARD_ITEM::FormatInternalUnits( int aValue )
|
||||||
while( --len > 0 && buf[len] == '0' )
|
while( --len > 0 && buf[len] == '0' )
|
||||||
buf[len] = '\0';
|
buf[len] = '\0';
|
||||||
|
|
||||||
|
if( buf[len] == '.' )
|
||||||
|
buf[len] = '\0';
|
||||||
|
else
|
||||||
++len;
|
++len;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -64,27 +64,62 @@ static const wxString traceFootprintLibrary( wxT( "KicadFootprintLib" ) );
|
||||||
|
|
||||||
// Helper function to print a float number without using scientific notation
|
// Helper function to print a float number without using scientific notation
|
||||||
// and no trailing 0
|
// and no trailing 0
|
||||||
// For many reasons, S-expr does not accept scientific notation
|
|
||||||
// for floating numbers, so we cannot use the %g format to print a fp number
|
#if 0
|
||||||
// and %f leaves trailing 0.
|
// Does not work for aValue < 0.0001 and > 0.
|
||||||
// this helper function uses the %f format, and then removes trailing 0
|
// Will need to support exponents in DSNLEXER if we get exponents > 16, i.e. the "precision".
|
||||||
std::string double2str( double aValue )
|
std::string double2str( double aValue )
|
||||||
{
|
{
|
||||||
char buf[50];
|
char buf[50];
|
||||||
int len = sprintf( buf, "%.16f", aValue );
|
int len;
|
||||||
|
|
||||||
|
if( aValue != 0.0 && fabs( aValue ) <= 0.0001 )
|
||||||
|
{
|
||||||
|
len = sprintf( buf, "%.10f", aValue );
|
||||||
|
|
||||||
while( --len > 0 && buf[len] == '0' )
|
while( --len > 0 && buf[len] == '0' )
|
||||||
buf[len] = '\0';
|
buf[len] = '\0';
|
||||||
|
|
||||||
// Remove useless separator:
|
|
||||||
if( buf[len] == '.' )
|
if( buf[len] == '.' )
|
||||||
buf[len] = '\0';
|
buf[len--] = '\0';
|
||||||
else
|
|
||||||
++len;
|
++len;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
len = sprintf( buf, "%.10g", mm );
|
||||||
|
}
|
||||||
|
|
||||||
return std::string( buf, len );
|
return std::string( buf, len );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
// this one handles 0.00001 ok, and 1.222222222222222 ok, previous did not.
|
||||||
|
std::string double2str( double aValue )
|
||||||
|
{
|
||||||
|
char buf[50];
|
||||||
|
int len;
|
||||||
|
|
||||||
|
if( aValue != 0.0 && fabs( aValue ) <= 0.0001 )
|
||||||
|
{
|
||||||
|
len = sprintf( buf, "%.16f", aValue );
|
||||||
|
|
||||||
|
while( --len > 0 && buf[len] == '0' )
|
||||||
|
buf[len] = '\0';
|
||||||
|
|
||||||
|
if( buf[len] == '.' )
|
||||||
|
buf[len] = '\0';
|
||||||
|
else
|
||||||
|
++len;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
len = sprintf( buf, "%.16g", aValue );
|
||||||
|
}
|
||||||
|
|
||||||
|
return std::string( buf, len );;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue