【问题标题】:how to make negative numbers into positive如何将负数变为正数
【发布时间】:2011-01-20 09:52:02
【问题描述】:

我的负浮点数为:

a = -0.340515;

要将其转换为正数,我使用 abs() 方法:

a = abs(a);

结果是a = 0.000000;

但我需要0.340515 的结果。

谁能告诉我怎么做。

【问题讨论】:

  • 当它是关于 C++ 的时候,为什么它被标记为 Objective C?
  • @Catfish_Man:实际上是关于 C.
  • 也许乘以-1?
  • @RezoMegrelidze 的建议是 100% 可以,如果您不想仅仅为了一个目的而包含整个库。当然,您必须 100% 确定您正在处理一个负数:t1 = t1 < 0 ? -1*t1 : t1; 我假设这就是 abs family 在这种情况下所做的一切。 |或者,您可以从 0 中减去负值:t1 = t1 < 0 ? 0-t1 : t1; 鉴于此,标准解决方案仍然是有利的,因为它更有可能立即变得清晰。随心所欲,但请记住这一点。

标签: c


【解决方案1】:

abs() 仅用于整数。对于浮点数,请使用 fabs()(或 fabs() 行之一,无论 a 实际是什么,都具有正确的精度)

【讨论】:

  • 如果不是太担心脏东西,也可以这样做:if(a<0.0) a=-a;
  • @Romain:我总是惊叹于人们如何回避自编码的标准解决方案。与 Jason 提供的解决方案相比,您的代码有什么优势?
  • @DevSolar 那时我还年轻又愚蠢。
  • @Romain:您的代码在负零时无法正常工作,即当 a == -0.0;
【解决方案2】:

你必须使用:

abs() for int
fabs() for double
fabsf() for float

上面的函数也可以,但是你也可以试试这样的。

    if(a<0)
    {
         a=-a;
    }

【讨论】:

  • 你可以试试,是的。但是你应该吗?
  • + 1 fabsf() 用于浮动。比公认的答案更正确。
  • 如果 (a
【解决方案3】:

float fabsf (float n) 用于float 值。

double fabs (double n) 用于double 值。

long double fabsl(long double) 用于long double 值。

abs(int) 用于int 值。

【讨论】:

    【解决方案4】:

    嗯,在数学中要将负数转换为正数,您只需要将负数乘以 -1;

    那么你的解决方案可能是这样的:

    a = a * -1;
    

    或更短:

    a *= -1;
    

    【讨论】:

      【解决方案5】:
      a *= (-1);
      

      问题解决了。如果一个问题有一个较小的解决方案,那么你们为什么要寻求一个复杂的解决方案。请指导人们使用基本逻辑,因为这样只有人们才能训练他们的编程逻辑。

      【讨论】:

        【解决方案6】:
        floor a;
        floor b;
        a = -0.340515;
        

        那该怎么办?

        b = 65565 +a;
        a = 65565 -b;
        

        if(a < 0){
        a = 65565-(65565+a);}
        

        【讨论】:

          【解决方案7】:

          这是我能想到的唯一方法。

          //positive to minus
          int a = 5; // starting with 5 to become -5
          int b = int a * 2; // b = 10
          int c = a - b; // c = - 5;
          std::cout << c << endl;
          //outputs - 5
          
          
           //minus to positive
          int a = -5; starting with -5 to become 5
          int b = a * 2; 
          // b = -10
          int c = a + b 
          // c = 5
          std::cout << c << endl;
          //outputs 5
          

          函数示例

          int b = 0;
          int c = 0;
          
          
          int positiveToNegative (int a) {
              int b = a * 2;
              int c = a - b;
              return c;
          }
          
          int negativeToPositive (int a) { 
              int b = a * 2;
              int c = a + b;
              return c; 
          }
          

          【讨论】:

            【解决方案8】:

            为什么要使用奇怪的硬命令,什么时候可以使用:

            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)
            

            要激活 C++ 11(如果您使用 Code::Blocks,您必须:

            1. 打开 Code::Blocks(推荐版本:13.12)。
            2. 转到设置 -> 编译器。
            3. 确保您使用的编译器是 GNU GCC Compiler。
            4. 点击编译器设置,然后在打开的选项卡中点击编译器标志
            5. 向下滚动直到找到:让 g++ 遵循 C++ 11 ISO C++ 语言标准 [-std=c++11]。检查,然后点击 OK 按钮。
            6. 重启 Code::Blocks 然后你就可以开始了!

            按照这些步骤操作后,您应该能够将 fabs(a) 用于浮点数,而不是 fabsf(a),后者仅用于 C99 或更低版本! (甚至 C++ 98 也可以让你使用 fabs 而不是 fabsf :P)

            【讨论】:

            • if(a &lt; 0) a -= a; urhm.... 这不会在if (a &lt; 0) a*=2; 结束吗? OP 试图接受的不是什么
            猜你喜欢
            • 2011-04-20
            • 2010-10-12
            • 2012-01-08
            • 1970-01-01
            • 2014-11-13
            • 1970-01-01
            • 1970-01-01
            • 2011-04-16
            相关资源
            最近更新 更多