Labrador/Desktop_Interface/ui_elements/siprint.cpp

59 lines
1.4 KiB
C++

#include "siprint.h"
siprint::siprint(const char *unitsInit, double valInit)
: value(valInit)
{
strncpy(units, unitsInit, 6);
}
char* siprint::printVal(){
std::string suffix;
bool negative = (value < 0);
char* tempStringPtr = printString;
if (negative)
{
printString[0] = '-';
tempStringPtr++;
}
if (abs(value) >= 1000000000000000000)
{
sprintf(tempStringPtr, "Inf %s", units);
}
else if (abs(value) >= 1000000)
{
sprintf(tempStringPtr, "%.2fM%s", abs(value)/1000000, units);
}
else if (abs(value) >= 1000)
{
sprintf(tempStringPtr, "%.2fk%s", abs(value)/1000, units);
}
else if (abs(value) >= 1)
{
sprintf(tempStringPtr, "%.2f%s", abs(value), units);
}
else if (abs(value) >= 0.001)
{
sprintf(tempStringPtr, "%.2fm%s", abs(value)*1000, units);
}
else if (abs(value) >= 0.000001)
{
sprintf(tempStringPtr, "%.2fu%s", abs(value)*1000000, units);
}
else if (abs(value) >= 0.000000001)
{
sprintf(tempStringPtr, "%.2fn%s", abs(value)*1000000000, units);
}
else if (abs(value) >= 0.000000000001)
{
sprintf(tempStringPtr, "%.2fp%s", abs(value)*1000000000000, units);
}
else if (abs(value) >= 1)
{
sprintf(tempStringPtr, "%.2f%s", abs(value), units);
}
return printString;
}