Как округлить число до другого числа, но только если оно находится в пределах 0,0001 от этого значения. бывший раунд 5,999 к 6, но не 5,93 к 6?

Squareroot вызывает длинное десятичное число, которое не равно. например 3.199999 не равно 3.2.

Я прошу пользователя ввести точки, чтобы увидеть, является ли форма треугольником. Если точки образуют треугольник... программа определяет, какой треугольник создается. Проблема, с которой я сталкиваюсь, заключается в том, что при вводе определенных точек; квадратный корень при нахождении длины стороны создает число вроде 5,9999. Это вызывает проблемы при определении треугольника, поскольку длины сторон будут показывать s1=5,9999, s2=5,9999 и s3=6. когда программа прочитает это, она скажет, что это равнобедренный треугольник, но скорее это должен быть равнобедренный треугольник, но не из-за проблемы с квадратным корнем. Как я могу это исправить?

m = x1 - x2;
l = y1 - y2; 
j = x2 - x3; 
j2 = y2 - y3; 
w = x3 - x1; 
w2 = y3 - y1; 



if( abs((x2-x1)*(y3-y1)-(y2-y1)*(x3-x1)) == 0) 
{
    printf("Not a triangle");
}
else
{

    if(s1 == s2 && s2 == s3 && s1 == s3) 
    {
        printf("\nThis forms an equilateral triangle"); 
    }   
    else //if statement above is not true
    {
        if((s1 == s2 && s1 != s3) || (s1 == s3 && s2 != s1) || (s2 == s3 && s1 != s2)) 
        {
            printf("\nThis forms an isoceles triangle"); 
        }
        if(s1 != s2 && s2 != s3 && s1 != s3) 
        {
            printf("\nThis forms a scalene trianle"); 
        }
    }
}
    printf("\n\ns1:  %g\ns2: %g\ns3:  %g\n",s1, s2, s3);

}

Я хотел бы, чтобы вывод показывал, когда s1 = 5,49999 s2 = 5,5 s3 = 5,5, чтобы сказать, что был создан равносторонний треугольник, а не равнобедренный. Спасибо за помощь


person VanGuilder11    schedule 14.10.2019    source источник
comment
Добавьте .0001 к числу, а затем сделайте math.floor() результата.   -  person John Gordon    schedule 15.10.2019


Ответы (1)


Просто рассчитайте это: новое число = 0,0001 * раунд (10 000 * число)

Examples: 
number = 5.9999    =>  newnumber = 6
number = 5.93      =>  newnumber = 5.93
number = 3.199999  =>  newnumber = 3.2
number = 5.999     =>  newnumber = 5.999

Если вы хотите, чтобы в последнем примере было 6, используйте 1000 вместо 10 000 в качестве коэффициента в приведенной выше формуле. Я не знаю вашего языка программирования, но полагаю, вы найдете правильный термин для «раунда».

Удачи!

person tempo    schedule 14.10.2019
comment
Добавление 0,0001, как предлагается в комментарии, также будет работать в большинстве случаев, но будьте осторожны с небольшими значениями, например. если s1=0,0001 и s2=0,0002, то с одной стороны удвоение, а с другой в пределах 0,0001. Возможно, вы захотите оставить все как есть, но добавление 0,0001 плюс округление приведет к 100% отклонению. Таким образом, вам нужно точно определить, как вы хотите обрабатывать экстремальные треугольники и какой метод добавления или множителя более удобен. - person tempo; 15.10.2019