2014-02-10 2 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

(данные/1024) * 180 –

+0

Почему вы думаете, что делаете что-то не так - какое неожиданное поведение вы видите? Кроме того, добавьте соответствующий тег для того, на каком языке программирования это должно быть. C? C#? Ява? и т. д. – TypeIA

+0

@PeteR Это целочисленная математика, поэтому выполнение этого пути обречено на сбой (результат всегда будет 0, если только 'data == 1024'). – TypeIA

ответ

0

Это код, который сработал.

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

Если вы согласны с тем, что ответ немного более приблизительный (из-за усечения вместо округления), вы можете уйти с использованием не плавающей запятой, реорганизовывая его, чтобы сказать '(данные * 180)/1024', - но следите за переполнение, если 'data' становится слишком большим. Однако не должно быть проблем с вашим исходным заявлением о проблемах, если у вас есть целые числа, которые не менее 20 бит ... – twalberg

Смежные вопросы