2014-02-10 110 views
0

我有0和1024之間的數字,我需要將其轉換爲範圍爲0〜180轉換號碼範圍

我自己發現了數學這個答案吧here但是我不能似乎在我的程序中是正確的。這是我有什麼

int treatValue(int data) { 
    int OldRange = (1024 - 0); 
    int NewRange = (180 - 0); 
    int NewValue = (((data - 0) * NewRange)/OldRange) + 0; 

    return NewValue; 
} 

其中數據是介於0和1024之間的值。我有什麼錯?

下面是使用上述代碼的一些輸出。

X: 24 (506) Y: 22 (493) 
X: 24 (506) Y: 21 (489) 
X: 24 (506) Y: 20 (481) 
X: 24 (506) Y: 19 (475) 
X: 24 (506) Y: 17 (463) 
X: 24 (506) Y: 11 (432) 
X: 24 (506) Y: 9 (418) 
X: 24 (506) Y: 8 (410) 
X: 24 (506) Y: 7 (405) 
X: 24 (506) Y: 6 (399) 
X: 24 (506) Y: 3 (384) 
X: 24 (506) Y: 1 (374) 
X: 24 (506) Y: 0 (365) 
X: 24 (506) Y: -1 (356) 
X: 24 (506) Y: -4 (341) 
X: 24 (506) Y: -10 (307) 
X: 24 (506) Y: -14 (279) 
X: 24 (506) Y: -17 (263) 
X: 24 (506) Y: -20 (249) 
X: 24 (506) Y: -24 (227) 
X: 24 (506) Y: -27 (209) 
X: 24 (506) Y: -29 (197) 
X: 24 (506) Y: -30 (188) 
X: 24 (506) Y: 31 (181) 
X: 24 (506) Y: 29 (168) 
X: 24 (506) Y: 27 (158) 
X: 24 (506) Y: 24 (137) 
X: 24 (506) Y: 19 (110) 
X: 24 (506) Y: 14 (81) 
X: 24 (506) Y: 10 (61) 
X: 24 (506) Y: 6 (38) 
X: 24 (506) Y: 2 (16) 
X: 24 (506) Y: 1 (6) 
X: 24 (506) Y: 0 (0) 
+0

(data/1024)* 180 –

+0

爲什麼你認爲自己做錯了事 - 你看到了什麼意外的行爲?另外,請爲應該使用的編程語言添加適當的標籤。 C? C#? Java的? etc. – TypeIA

+0

@PeteR這是整數數學,所以這樣做註定要失敗(除非數據== 1024,否則結果將始終爲0)。 – TypeIA

回答

0

這是什麼工作的代碼。

float treatValue(int data) { 
    return (data/1024)*180; 
} 
+0

如果你確定答案略微更接近(由於截斷而不是舍入),你可以通過重新組織它來表示「(data * 180)/ 1024'而不使用浮點數 - 但要小心如果數據變得太大,就會溢出。但是,如果您的原始問題陳述不成問題,只要您的整數至少爲20位...... – twalberg