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