我有一个计算 10u Ω 到 200K Ω 范围内的电阻的设备。我想写一段代码将这些数字转换为更简单的读取格式;例如:将 99912.3125 转换为 99.91 K Ω 和 0.010039 转换为 10.04 m Ω。
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);
}
这里是代码的输出:
但是在 milli ohm 和 ohm 范围之间进行更改存在问题。正如您所看到的,log10(0.9)与 log10(1)相同,尽管与 0.1 处于相同的数量级!因此,而不是将 0.9 显示为 900m Ω,而是将其显示为 0.900 Ω,这不是我想要做的。有没有更简单的方法来实现这种类型的格式化?如果不是,我该如何解决这个小错误的问题?
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(44条)