как найти плюс или минус х процентов от числа - PullRequest
2 голосов
/ 17 января 2012

В моем классе две величины:

aToday, aYesterday

У меня есть число X от 1 до 100, введенное пользователем.

Скажите, что он вводит 10.

Что я хочу сделать, это выяснить, является ли aToday на 10 процентов больше, чем вчера, или на 10 процентов меньше, чем вчера.

Как написатьэто?

Я не получаю на 10 процентов меньше.Х процентов больше будет:

if(aToday > (x/100 * aYesterday))

Как проверить на 10 процентов больше?

Ответы [ 5 ]

3 голосов
/ 17 января 2012

10% больше:

if ( aToday > aYesterday*1.1 )

10% меньше

if ( aToday < aYesterday*0.9 )

Конечно, убедитесь, что вы вычисляете, например, double экземпляров, а не int экземпляров, иначе вы получите неожиданные результаты из-за округления

Редактировать

В процентах х

x больше (например, x = 10 -> 10 процентов больше)

if ( aToday > ( 1 + (x/100) ) * aYesterday )

и х меньше

if ( aToday < ( 1 - (x/100) ) * aYesterday )

Замечание об использовании правильных типов, конечно, остается в силе

0 голосов
/ 17 января 2012
isMore = today > (1+x/100)*yesterday
isLess = today < (1-x/100)*yesterday
0 голосов
/ 17 января 2012
public static boolean isMoreThanPercentage(double a, double b, double percentage)
{
    return ((a / b) * 100 - 100) >= percentage; // Is a greater than b by percentage% of b or more?
}

Например:

isMoreThanPercentage(20, 10, 50) возвращает true, потому что 20 больше, чем 10 на 100%.

0 голосов
/ 17 января 2012

В основном допустимый диапазон, скажем, X процентов находится между

( (100 - x) * aYesterday / 100 , (100 + x ) * aYesterfday / 100 )

Вычисли их и назови (LowerBound , UpperBound)

поэтому ваш чек становится

    LowerBound  = (100 - x)  * aYesterday / 100;
    UpperBound  = (100 + x ) * aYesterfday / 100;
    if ( aToday > LowerBound || aToday < UpperBound ) 
    {
    }

Если вы хотите избежать деления и усечения, если все целые числа, вы можете умножить все на 100.

    LowerBound  = (100 - x)  * aYesterday;
    UpperBound  = (100 + x ) * aYesterfday;
    HundredTimesaToday = 100 * aToday;
    if ( HundredTimesaToday > LowerBound || HundredTimesaToday < UpperBound ) 
    {
    }
0 голосов
/ 17 января 2012
hasIncreasedMoreThanXPct = (aToday > 1 + (X / 100) * aYesterday  ) 
hasDecreasedMoreThanXPct = (aToday < 1 - (X / 100) * aYesterday  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...