用于获取绝对值的用户定义函数

Posted

技术标签:

【中文标题】用于获取绝对值的用户定义函数【英文标题】:User defined function for getting absolute value [closed] 【发布时间】:2014-08-16 05:45:24 【问题描述】:

使用 Wing ide 3.3.5

如果不使用 Python 中内置的 abs 函数,我将如何编写一个返回其 x 的绝对值的函数 my_abs(value)。

例如:

Test                Result
print(my_abs(3.5))  3.5
print(my_abs(-7.0)) 7.0

【问题讨论】:

IDE 可能如何相关?你明白abs 是做什么的吗? 【参考方案1】:

一个刻薄的答案是使用内置的__abs__() 函数:

>>> print((-7.0).__abs__())
7.0

这是一个天真的单线(基本上相当于@Nabin 的答案):

def simple_abs(num):
    return -num if num < 0 else num

然而事实证明,有一个bug,因为

>>> -0.0 < 0
False
>>> simple_abs(-0.0)
-0.0                        ← Buggy
>>> abs(-0.0)
0.0                         ← Correct

事实证明testing for negative zero in Python 很难做到。一种可能的测试是str(-0.0) == '-0.0'。以下是@JasonS 帮助我提出的建议:

import math

def my_abs(num):
    return -num if math.copysign(1, num) < 0 else num

或者,以更长、更易读的形式:

def my_abs(num):
    if math.copysign(1, num) < 0:
        return -num
    else:
        return num

【讨论】:

+1 表示__abs__() 尽管关于负零的讨论也很有趣。 我认为你不需要str(num),想想math.copysign(1, num)。还是和__abs__一样作弊? @JasonS 我喜欢这样。并入第 2 版。【参考方案2】:

一个简单的算法是:

if number<0:
    return number*-1
else:
    return number

您必须检查该数字是否为负数。是这样,然后将它与 -1 相乘并返回。或者你必须原封不动地返回号码。

【讨论】:

以上是关于用于获取绝对值的用户定义函数的主要内容,如果未能解决你的问题,请参考以下文章

取 CGFloat 的绝对值

MySQL函数--数学函数

sqlserver取绝对值的abs()函数

Oracle数值处理函数 (绝对值取整...)

awk判断整除,取绝对值,按位分割

php中可以使用取绝对值函数 abs() 将负数转成正数