00001 #include "AnnotationNumberFormater.h" 00002 00003 #ifdef OLDSTREAMS 00004 # include <strstream> 00005 # define ios_base ios 00006 # define ostringstream ostrstream 00007 #else 00008 # include <sstream> 00009 #endif 00010 00011 #include <iomanip> 00012 #include <cmath> 00013 00014 Anaphe::AIDA_Histogram_native::AnnotationNumberFormater::AnnotationNumberFormater(): 00015 m_precisionDigits( Anaphe::AIDA_Histogram_native::AnnotationNumberFormater::defaultPrecisionDigits ) 00016 {} 00017 00018 std::string 00019 Anaphe::AIDA_Histogram_native::AnnotationNumberFormater::formatInteger( int number ) const 00020 { 00021 std::ostringstream os; 00022 os << number; 00023 #ifndef BADENDS 00024 os << std::ends; 00025 #endif 00026 return os.str(); 00027 } 00028 00029 00030 std::string 00031 Anaphe::AIDA_Histogram_native::AnnotationNumberFormater::formatDouble( double number ) const 00032 { 00033 const double n = std::abs( number ); 00034 std::ostringstream os; 00035 if ( n < 0.1 ) { 00036 os << std::setiosflags(std::ios_base::scientific); 00037 os << std::setprecision(m_precisionDigits); 00038 } 00039 else if ( n < 10 ) { 00040 os << std::setiosflags(std::ios_base::fixed); 00041 os << std::setprecision(m_precisionDigits); 00042 } 00043 else if ( n < 100 ) { 00044 os << std::setiosflags(std::ios_base::fixed); 00045 os << std::setprecision(m_precisionDigits-1); 00046 } 00047 else { 00048 os << std::setiosflags(std::ios_base::scientific); 00049 os << std::setprecision(m_precisionDigits); 00050 }; 00051 00052 os << number; 00053 #ifndef BADENDS 00054 os << std::ends; 00055 #endif 00056 return os.str(); 00057 } 00058 00059 00060 void 00061 Anaphe::AIDA_Histogram_native::AnnotationNumberFormater::setPrecisionDigits( int digits ) 00062 { 00063 m_precisionDigits = digits; 00064 } 00065 00066 00067 int 00068 Anaphe::AIDA_Histogram_native::AnnotationNumberFormater::precisionDigits() const 00069 { 00070 return m_precisionDigits; 00071 } 00072