Ответ 1
abs()
предназначен только для целых чисел. Для плавающей запятой используйте fabs()
(или одну из строк fabs()
с правильной точностью для того, что на самом деле есть)
Я имею отрицательное число с плавающей запятой как:
a = -0.340515;
чтобы преобразовать это в положительное число, я использовал метод abs() как:
a = abs(a);
результат a = 0.000000;
Но мне нужен результат как 0.340515
.
Может ли кто-нибудь сказать мне, как это сделать.
abs()
предназначен только для целых чисел. Для плавающей запятой используйте fabs()
(или одну из строк fabs()
с правильной точностью для того, что на самом деле есть)
Вы должны использовать:
abs() для int
fabs() для double
fabsf() для float
Вышеуказанная функция также будет работать, но вы также можете попробовать что-то вроде этого.
if(a<0)
{
a=-a;
}
Используйте float fabsf (float n)
для float
значений.
Используйте double fabs (double n)
для значений double
.
Используйте long double fabsl(long double)
для long double
значений.
Используйте abs(int)
для int
значений.
Как указано выше, вам придется использовать определенный вариант abs() на основе интегрального типа.
Однако я бы определил макрос вроде:
#define POSITIVE(n) ((n) < 0 ? 0 - (n) : (n))
чтобы я мог передавать любое значение, особенно если не уверен в знаке и всегда получаю положительный результат.
a *= (-1);
задача решена. Если есть решение проблемы меньшего размера, то почему вы, ребята, идете к сложному решению. Пожалуйста, дайте людям указание использовать базовую логику, потому что тогда только люди могут тренировать свою логику программирования.
Ну, в математике, чтобы преобразовать отрицательное число положительного числа нужно просто многократное отрицательное число по -1;
Тогда ваше решение может быть таким:
a = a * -1;
или короче:
a *= -1;
Почему вы хотите использовать странные жесткие команды, когда можете использовать:
if(a < 0)
a -= 2a;
Оператор if, очевидно, применяется только тогда, когда вы не уверены, будет ли число положительным или отрицательным.
В противном случае вам придется использовать этот код:
a = abs(a) // a is an integer
a = fabs(a) // a is declared as a double
a = fabsf(a) // a is declared as a float (C++ 11 is able to use fabs(a) for floats instead of fabs)
Чтобы активировать С++ 11 (если вы используете Code:: Blocks, вам необходимо:
После выполнения этих шагов вы сможете использовать fabs (a) для float вместо fabsf (a), который использовался только для C99 или меньше! (Даже С++ 98 может позволить вам использовать fabs вместо fabsf: P)