Математическая ошибка Java с плавающей точкой? - PullRequest
2 голосов
/ 18 февраля 2012

Я пытаюсь рассчитать соотношение сторон для изображения:

Log.d("img.width:", String.valueOf(img.getIntrinsicWidth()));
Log.d("img.height:", String.valueOf(img.getIntrinsicHeight()));
float aspect = ((float)img.getIntrinsicWidth()) / ((float)img.getIntrinsicWidth());
Log.d("aspect:", String.valueOf(aspect));

однако это приводит к неожиданным результатам:

img.width:   297
img.height:  167
aspect:      1.0

Кажется, у него есть простой ответ, но я не могу понять.

Ответы [ 5 ]

8 голосов
/ 18 февраля 2012

Вы делите ширину на ширину.Попробуйте заменить один из них на высоту.

5 голосов
/ 18 февраля 2012

У вас есть опечатка.

float aspect = ((float)img.getIntrinsicWidth()) / 
                                                ((float)img.getIntrinsicWidth());

Вы делите ширину на ширину, которая всегда будет давать 1, вместо этого разделите на высоту:

float aspect = ((float)img.getIntrinsicWidth()) /
                                               ((float)img.getIntrinsicHeight());
2 голосов
/ 18 февраля 2012

Это опечатка, один из них должен быть ростом.Вы делите ширину на ширину

float aspect = ((float)img.getIntrinsicWidth()) / ((float)img.getIntrinsicWidth());
1 голос
/ 18 февраля 2012

У вас есть опечатка, вы делите ширину на ширину. Вероятно, должна быть ширина по высоте.

Также, чтобы сделать это немного проще для глаз, вам не нужно разыгрывать обе стороны, чтобы дивизия использовала поплавки; левая сторона будет преобразована в плавающее автоматически, если правая сторона равна единице.

float aspect = img.getIntrinsicWidth() / (float)img.getIntrinsicHeight();
1 голос
/ 18 февраля 2012

Вы пробовали float aspect = (new float(img.getIntrinsicWidth())) / (new float(img.getIntrinsicWidth()));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...