使所有数字变为负数

81

我有一些浮点数:

-4.50
+6.25
-8.00
-1.75

我如何将所有这些转为负浮点数,使它们变为:

-4.50
-6.25
-8.00
-1.75

此外,我需要一种反转的方法。

如果这个浮点数是负数,则将它变为正数。


请注意,反转并不像第一个数集的倒数。如果您将第一组数字的所有符号更改为负数,然后将它们全部翻转回正数,您将无法得到开始时的数字。 - Progrock
9个回答

215
$num = $num <= 0 ? $num : -$num ;

或者,我认为更好的解决方案是:

$num = -1 * abs($num)

正如@VegardLarsen所发表的,

为了简短可以避免显式乘法,但我更喜欢可读性胜过简洁。

建议避免if/else(或等效的三元运算符),特别是如果您必须处理一些项目(在循环中或使用lambda函数),因为它会影响性能。

"如果浮点数为负数,则将其变为正数。"

要改变数字的符号,您只需执行以下操作:

$num = 0 - $num;

或者,当然也可以将其乘以-1 :)


2
哈,好的...我这才有点怀疑自己的理智。 - Dan Tao
也许不是,你是对的。这将取决于已经确定的数字数量 :) - drAlberT
-1 -1 * (0 - $num) 等于 (-1 * 0) - (-1 * $num) 等于 1 * $num - Gumbo
1
我可能错了,但我相当确定,因为您正在根据某些条件($num为正)执行操作而不是其他条件($num <= 0),所以您总是会在某个地方使用if语句。abs($num)难道不只是在幕后执行$num = ($num >= 0) ? $num : -$num;吗? - Dan Tao
1
你说得没错,但这将在低级别的C语言中执行。通过PHP实现,而不是在PHP中实现。 - drAlberT
显示剩余5条评论

57
$float = -abs($float);

2
同时我需要一种方法来进行反向操作,这个答案只能做一件事情... - ReSpawN
@ReSpawN 公平地说,相反的操作就是把“-”去掉。即 $float = abs($float); - Frits
值总是负数。预计会提到它。 - ShivarajRH

40

可以考虑一些简单的事情,比如:

  • 反转:

$num = -$num;
  • 将仅为正数转换为负数:

  • if ($num > 0) $num = -$num;
    
  • 将负数转换为正数:

    if ($num < 0) $num = -$num;
    

  • 18

    关于编辑:"同时我需要一种方法来实现反向操作,即将负数浮点数转换为正数"

    $number = -$number;
    

    将数字变为它的相反数。


    3

    我认为Gumbo的回答已经很好了。有些人喜欢使用这个花哨的表达式,它能够实现相同的功能:

    $int = (($int > 0) ? -$int : $int);
    

    编辑: 显然,您正在寻找一种使负数变为正数的函数。 我认为这些答案是最简单的:

    /* I am not proposing you actually use functions called
       "makeNegative" and "makePositive"; I am just presenting
       the most direct solution in the form of two clearly named
       functions. */
    function makeNegative($num) { return -abs($num); }
    function makePositive($num) { return abs($num); }
    

    3
    为什么在使用 abs() 函数时需要用包装函数?不必要。 - drAlberT

    3
    function positive_number($number)
    {
        if ($number < 0) {
            $number *= -1;
        }
    
       return $number;
    }
    

    0
    function invertSign($value)
    {
        return -$value;
    }
    

    感谢您在评论中解释为什么要给我点“踩”。非常有用。 - Frederik Krautwald
    1
    我认为这是因为原始发布者最初声明他们只想要正数翻转符号。但是问题相当令人困惑,带有模棱两可的附加条件:“另外我需要一种做相反操作的方法”。 - Progrock

    -1

    这里有一个简单的可重用代码,可以反转 int、float、double 或 decimal 的符号。 如果值为正数,则该方法将返回负数,反之亦然。

    function inverseSign($value)
    {
        return $value * (-1);
    }
    

    你好奇地问,你有注意到其他答案吗? - Your Common Sense
    事情可以用不同的方式完成,不只有一种方法。 - Félix Maroy

    -1

    使用alberT和Dan Tao的解决方案:

    将负数转换为正数,反之亦然

    $num = $num <= 0 ? abs($num) : -$num ;
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接