ошибка умножения - PullRequest
       2

ошибка умножения

0 голосов
/ 13 октября 2011

Если я умножу 12 х 25,4, я получу 304,7, тогда как ожидаю 304,8.Я вижу, что используя нечетные числа x 25,4, я получаю правильные ответы, но использование четных чисел всегда кажется отключенным на 0,1Я пишу научное приложение, которое в значительной степени основано на формулах, поэтому любое понимание будет полезным.

if (((m1_sqs1_spinner.getSelectedItem().toString().equals("in"))))  

    { // start square in inches
         double m1_sqs1_eng = new Double(m1_sqs1.getText().toString()); 

         double square_effective_dia_inch = m1_sqs1_eng;

         double square_effective_dia_mm = square_effective_dia_inch * 25.4;
         m1_ed_mm.setText(Double.toString(square_effective_dia_mm));

    } // end square in inches

Ответы [ 2 ]

2 голосов
/ 13 октября 2011

Типы чисел с плавающей точкой в ​​Java являются приблизительными.Попробуйте добавить 1 + 2 + 3 + 4 как тип float, и вы можете получить 10.00000003.

Чтобы обеспечить точную математику, попробуйте использовать тип java.math.BigDecimal.Это боров памяти, но он точен.

1 голос
/ 13 октября 2011

Я не знаю, какой язык программирования вы используете, но 12 * 25.4 дает мне 304,8, когда я делаю это с помощью Java:

public static void main(String[] args) {
   double result = 12 * 25.4;

   System.out.printf("Result: %.1f%n", result );
}

А если серьезно - как вы отображаете полученный результат??Используете ли вы один из многих вариантов числового форматирования, доступных в Java (один из которых показан выше)?Также понимаете ли вы ограничения точности при использовании 64-битных переменных IEEE 754 (с двойной точностью)?Они довольно точны и полезны для большинства приложений с плавающей запятой, но не для приложений, которые предъявляют строгие требования к точности, такие как финансовые расчеты.

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