2015-05-13 3 views
-3

У меня есть вычисления с плавающей точкой (означает, что мой метод, возвращающий значения float или переменные в моем методе, является float-типом) в java, но когда я даю ввод двойной тип ... все вычисления (значения возвращаемых типов & переменных в рамках метода) должны быть преобразованы как двойные, как это возможно? .. но я должен использовать один и тот же класс для обоих поплавковых и двойных входов.Как преобразовать java-файл с float как возвращаемый тип и тип данных в форму двойного

мой метод

public float round_a_Scale(int m, float minValue, float maxValue) {   
    if (m == 0) 
     m = 10; 

    float span = maxValue - minValue; 
    float step = (float) Math.pow(10, Math.floor(Math.log(span/m)/2.302585092994046)); 
    float err = m /span * step; 

    // Filter ticks to get closer to the desired count. 
    if (err <= .15) 
     step *= 10; 
    else if (err <= .35) 
     step *= 5; 
    else if (err <= .75) 
     step *= 2; 

    return step; 
} 

В моей MINVALUE и MaxValue имеют тип поплавка, если я посылаю двойные значения, тогда все переменные (span, step) и возвращаемый тип моего метода должен быть изменен, чтобы ввести double. как это возможно

+0

Если вы используете примитивы, добавьте 'f' или' F' к буквальному значению - например. '3.14f'. – Mena

+0

Я думаю, что это представление значений float. Но это не мое требование. –

+0

Почему бы просто не использовать двойной и забыть об этом? – ChiefTwoPencils

ответ

0

например. у вас есть такой метод, как вы можете применить двойной результат для float.

Но имейте в виду, что вы потеряете точность.

float doit(double d) { 
    return (float)3.4f * d; 
} 
-1

Когда вы меняете сигнатуру метода, чтобы использовать double вместо float, вы также можете передавать значения float, отбрасывая их (double).

Сделайте это так, потому что double удваивает этот диапазон, а затем плавает, поэтому использование double гарантирует, что вы не получите исключений переполнения.

Ниже приведен псевдокод и не проверен!

Использование двойной:

public double compute(double value) { 
    return value * (double)2; 
} 

double result = compute(45.5d); 

Использование Float:

public float compute(float value) { 
    return value * (float)2; 
} 

double value1 = Float.MAX_VALUE; 
double value2 = Float.MAX_VALUE + 1; 
float resul = 0f; 

// Will be called 
if (value1 <= Float.MAX_VALUE) { 
    result = compute((float)value1); 
} 

// Will not be called 
if (value2 <= Float.MAX_VALUE) { 
    result = compute((float)value2); 
} 

А вот ваш метод с помощью двойников, будет, за исключением плавать тоже.

public double round_a_Scale(int m, double minValue, double maxValue) { 
    if (m == 0) 
     m = 10; 

    double span = maxValue - minValue; 
    double step = (double) Math.pow(10, Math.floor(Math.log(span/m)/2.302585092994046d)); 
    double err = m/span * step; 

    // Filter ticks to get closer to the desired count. 
    if (err <= .15) 
     step *= 10; 
    else if (err <= .35) 
     step *= 5; 
    else if (err <= .75) 
     step *= 2; 

    return step; 
} 

Или оставить как есть и проверить Incomming двойных значений, если они не превышают Float.MAX_VALUE.

+0

Но если я отправлю небольшие значения диапазона int или ниже этого, тогда память будет потрачена впустую на –

+0

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

+0

Вставьте свой код в свой вопрос! И отформатируйте его правильно! Не прочитал бы это в комментариях –

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