機能が期待どおりに動作しません。目標は、埋め込みデバイス (LCD 付き) 上の人間が読める物理単位の文字列をバッファーに出力することです。たとえば、 where as の1234uV
ように表示されます。オプションで適切な調整を行う正しい (高速で安全な) 実装はどのようになっていますか (で)?+1.234mV
-100023uV
-1.000,230 V
uV
uint8 voltage_string(char* buf, int32 uVolt)
{
static const int32 VOLT = 1000000;
static const int32 MILLIVOLT = 1000;
const int32 V = uVolt / VOLT;
const int32 mV = (uVolt - V*VOLT) / MILLIVOLT;
const int32 uV = (uVolt - V*VOLT - mV*MILLIVOLT);
uint8 n = 0;
if(abs(V) > 0) {
n = sprintf(buf, "%+d", V);
n += sprintf(buf + n, ",%3d", abs(mV));
n += sprintf(buf + n, ".%3d V", abs(uV));
return n;
}
if(abs(mV) > 0) {
n = sprintf(buf, "%+d", mV);
n += sprintf(buf + n, ",%3d mV", abs(mV));
return n;
}
if(abs(uV) > 0) {
n = sprintf(buf, "%+3d uV", uV);
return n;
}
return n;
}