c# 數值轉換問題

小弟係c#新手,多多指教
小弟本來寫緊個software去讀出電表電壓數值,但遇到個數值轉換問題
電表輸入範圍+/- 10V
讀出數值為ushort
問題係當輸入為 +10V,-10V , 讀出數值分別為 32768, 65535, 0V 有時顯示為 0 or 32765(應該係 +0,-0 問題)
如果我由ushort轉short,會否遇到 +/-0問題?
如果想由 -10V--0--+10V  數值由-32765--+32765 應該用咩方法寫呢? 是否直接由ushort 轉short?

more sample data? e.g. value of +/- 1.5V

TOP

voltage        reading
-9.99        65535
-8.09        59303
-6.096        52764
-4.989        49133
-4.097        46206
-2.995        42591
-1.999        39323
-0.997        36038
-0.004        32782
-0.004        32781
0.045        147
0.997        3270
1.999        6555
4.99        16364
5.295        17365
8.39        27506
9.89        32445

TOP

回覆 2# antlee


    reading and voltage reading is perfectly linear
問題係+/-0V個reading 一時0,一時係32756
有無咩command可以把-10V~0V轉成-35765~0, 0~+10V 轉到0~32767

TOP

就咁睇, 唔係0~10V係0-32765
-0~-10V就32765-65535

但係中間點係咩你可能要試試
做個if else去變返做short OK嗎?

TOP

回覆 5# alexwang


   仲有無O的直接O的方法,我之前都最過用if >32765, 變做<0,好似好stupid想法
試過硬轉由ushort-->short,但當大過32768 就overflow

TOP

有正負既數點會用USHORT架, 用double 啦

TOP

有正負既數點會用USHORT架, 用double 啦
kckcp 發表於 2015-11-11 13:46



    有正負既數點會用USHORT架 x2

TOP

佢應該係讀緊D dll library, 特別係C寫果D, 通常都係用返D unsigned data type
所以無咩問題, 問題係佢要自己convert返去V數, 果度要用decimal (有果要計數) 或double (有floating point問題)

但基本上無直接解法, 通常用if else型式去做,
因為program唔會知你邊個range先係正數, 所以唔會自動unsiged轉做signed

TOP

delete

TOP