【问题标题】:Swift - Convert to absolute valueSwift - 转换为绝对值
【发布时间】:2014-08-01 07:35:06
【问题描述】:

有没有办法从整数中获取绝对值?
例如

-8  
to  
 8

我已经尝试使用 UInt(),假设它会将 Int 转换为无符号值,但它不起作用。

【问题讨论】:

  • cast/convert 永远不应该用来改变值

标签: ios iphone swift


【解决方案1】:

标准的abs() 函数在这里很好用:

let c = -8
print(abs(c))
// 8

【讨论】:

  • 使用abs()需要导入什么?
  • @JarrodSmith:导入基础
  • 您可以导入 Darwin 或 Foundation
  • 达尔文不是基金会的一部分吗?
  • 它不适用于Int8(-128) - 这将导致EXC_BAD_INSTRUCTION
【解决方案2】:

在 Swift 5 中,您可以使用以下两种方法之一将整数转换为其绝对值。


#1。从magnitude 属性中获取Int 的绝对值

Int 有一个magnitude 属性。 magnitude 有以下声明:

var magnitude: UInt { get }

对于任何数值xx.magnitudex的绝对值。

以下代码 sn-p 显示如何使用 magnitude 属性来获取 Int 实例的绝对值:

let value = -5
print(value.magnitude) // prints: 5

#2。从abs(_:) 方法获取Int 的绝对值

Swift 有一个名为abs(_:) 的全局数值函数。 abs(_:) 有以下声明:

func abs<T>(_ x: T) -> T where T : Comparable, T : SignedNumeric

返回给定数字的绝对值。

以下代码 sn-p 显示如何使用 abs(_:) 全局函数来获取 Int 实例的绝对值:

let value = -5
print(abs(value)) // prints: 5

【讨论】:

  • print(abs(Int.min)) 不起作用。 Swift 3 有什么解决方案吗?我还没有更新我的项目。
  • 错过了说“获取Intstance的绝对值”的机会
  • @bibscy 请参阅Apple's explanation 以了解为什么abs(Int8.min) 无法工作并因此产生溢出错误。
【解决方案3】:

如果要从 double 或 Int 中获取绝对值,请使用 fabs func:

var c = -12.09
print(fabs(c)) // 12.09
c = -6
print(fabs(c)) // 6

【讨论】:

  • 是的,你是对的,但我的重点是fabs,对不起
【解决方案4】:

如果您想强制更改某个数字或使其保持正数。
方法如下:

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

【讨论】:

  • 晶圆厂已弃用
猜你喜欢
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 2014-12-12
  • 2017-04-01
相关资源
最近更新 更多