Использование научных префиксов - PullRequest
2 голосов
/ 30 сентября 2019

У меня есть устройство, которое рассчитывает сопротивления в диапазоне от 10 мкОм до 200 кОм. Я хочу написать кусок кода, чтобы преобразовать эти числа в более простой для чтения формат;например: преобразовать 99912,3125 в 99,91 кОм и 0,010039 в 10,04 мОм. до сих пор я написал этот код, который по большей части работает нормально:

float num[9] = {100000, 10000, 1000, 100, 10, 1,  0.1, 0.01, 0.001};
float nums[9] =  {99999.9,9999.9,999.9,99.9,9.9,0.9,0.09,0.009,0.0009};
String prefixes[3] = {"mΩ","Ω","KΩ"};
int powers[3] = {-3,0,3};

void setup() {
  Serial.begin(9600);
}

int prefix(int x){
  return (x < 0) ? 0 : (x/3)+1;
}

int decimalPlaces(int x){
  return (x < 0) ? abs(x) : 3-(int(x)%3);
}

void loop() {
  for (int i=0; i<9; i++){
    Serial.print(num[i],6);
    Serial.print("\t");
    if (i>4){
      Serial.print("\t");
    }
    int lg = log10(num[i]);
    int pref = prefix(lg);
    Serial.print(" | ");
    Serial.print(num[i]/pow(10,powers[pref]),decimalPlaces(lg));
    Serial.println(prefixes[pref]);
  }
  Serial.println("##############################");
  for (int i=0; i<9; i++){
    Serial.print(nums[i],6);
    Serial.print("\t");
    if (i>3){
      Serial.print("\t");
    }
    int lg = log10(nums[i]);
    int pref = prefix(lg);
    Serial.print(" | ");
    Serial.print(nums[i]/pow(10,powers[pref]),decimalPlaces(lg));
    Serial.println(prefixes[pref]);
  }
  Serial.println("##############################");
  Serial.println(int(log10(0.1)));
  Serial.println(int(log10(0.9)));
  Serial.println(int(log10(1)));
  while(true);
}

А вот вывод кода:

enter image description here

но есть проблема с изменением между миллиом ом и диапазоном ом. Как вы можете видеть, log10 (0.9) - это то же самое, что log10 (1), несмотря на тот же порядок величины, что и 0.1! поэтому вместо 0,9 отображается как 900 мОм, оно отображается как 0,900 Ω, что я не собирался делать. Есть ли более простой способ добиться этого типа форматирования? если нет, то как я могу решить проблему с этой маленькой ошибкой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...