mirror of https://github.com/EspoTek/Labrador.git
59 lines
1.4 KiB
C++
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;
|
|
}
|