Labrador/Desktop_Interface/ui_elements/siprint.cpp

66 lines
1.6 KiB
C++

#include "siprint.h"
siprint::siprint(char *unitsInit, double valInit)
{
strncpy(units, unitsInit, 6);
value = valInit;
}
char* siprint::printVal(){
double tempValue = value;
bool negative = false;
if (tempValue == 0){
sprintf(printString, "0%s", units);
return printString;
}
if (value < 0){
negative = true;
tempValue *= -1;
}
if (tempValue >= 1000000000000000000){
sprintf(printString, "Inf %s", units);
return printString;
}
if (tempValue >= 1000000){
sprintf(printString, "%c%.2fM%s", (negative ? '-':' '), tempValue/1000000, units);
return printString;
}
if (tempValue >= 1000){
sprintf(printString, "%c%.2fk%s", (negative ? '-':' '), tempValue/1000, units);
return printString;
}
if (tempValue >= 1){
sprintf(printString, "%c%.2f%s", (negative ? '-':' '), tempValue, units);
return printString;
}
if (tempValue >= 0.001){
sprintf(printString, "%c%.2fm%s", (negative ? '-' : ' '), tempValue*1000, units);
return printString;
}
if (tempValue >= 0.000001){
sprintf(printString, "%c%.2fu%s", (negative ? '-':' '), tempValue*1000000, units);
return printString;
}
if (tempValue >= 0.000000001){
sprintf(printString, "%c%.2fn%s", (negative ? '-':' '), tempValue*1000000000, units);
return printString;
}
if (tempValue >= 0.000000000001){
sprintf(printString, "%c%.2fp%s", (negative ? '-':' '), tempValue*1000000000000, units);
return printString;
}
sprintf(printString, "0%s", units);
return printString;
}