2012-05-11 2 views
2

Я пытался использовать мой новый IOIO для Android и должен был найти частоту сигнала.
Итак, я преобразовал сигнал в двоичный, а затем сделал 1, деленный на время между 1. Хотя, когда я это сделал, я обнаружил, что получил 0 в качестве вывода. Затем я решил посмотреть, что 1/2 дал мне, и, к моему удивлению, он также дал 0! Кто-нибудь может подумать, почему это так?Android - 1 разделен на 2 = 0

Код: private float frequency = 1/2;

Может ли это быть с помощью списка дел Float.toString(frequency)?

+2

Обратите внимание, что данное поведение не зависит от Android; поведение будет одинаковым в «нормальной» Java-программе. –

ответ

9

Это пример целочисленного деления. Попытка:

private float frequency = 1.0/2.0; 

Java выполнит 1/2, что даст 0.5. Однако, поскольку Java рассматривает это как операции с целыми числами (а 0.5 не является целым числом), он усекает десятичное число и оставит только целую часть. 0. Говоря Java для работы с float (1.0 по сравнению с 1), вы скажите ему сохранить десятичную часть промежуточного вычисления.

+3

Важно понимать, что выражение справа от присваивания оценивается как написанное независимо от типа переменной, которой назначается результат. В этом случае используются целочисленные литералы, поэтому результат выражения представляет собой целое число, которое затем преобразуется/преобразуется в float. –

0

Это целочисленное деление (только целые числа).

Try:

private float frequency = 1/2.0; 
1

1 и 2 представляют собой целые числа, и они возвращают целое число.

Попробуйте создать два поплавка с этими значениями перед делением.

5

1 и 2 являются целыми числами в java. Если вы хотите, чтобы их явно интерпретировали как поплавки, которые вам нужно сделать.

private float frequency = 1f/2f; 

Если вы не заботитесь, если математика на самом деле делаются на двойной первом, то просто это легче читать:

private float frequency = 1.0/2.0; 
0

Когда вы aritmetic с целыми элементами Ресул становится целым числом добавить .0

так

private float frequency = 1.0/2.0; 
0

использование

private float frequency = 1F/2F; 
1

Вы должны гипса. Вот more information

float myValue = (float) 1/2;

class Main { 
    public static void main(String[] args) { 
     float myValue = (float) 1/2; 
     System.out.println("1/2 = " + myValue); 
    } 
} 

Выход будет 1/2 = 0.5

0

Если вы делите два целых числа, и вы не получаете правильный выход только касте оценочную int результат float, как показано ниже.

int b = 2; 
    int a = 1; 

    float out = (float) a/b; 
    System.out.println(out); 

Это произведет выход 0.5

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