Swift:计算一个数字是整数还是双精度

Swift:计算一个数字是整数还是双精度,swift,Swift,我想知道一种计算数字是整数还是双精度的方法,然后将其放入if-else语句中。 有人知道怎么做吗?您可以编写自己的简单扩展,如: extension FloatingPoint { var isInteger: Bool { rounded() == self } } 用法: 2.0.isInteger // true 2.5.isInteger // false 请注意Double.infinity.isInteger及其负数都返回true,如Alexander在评论中所述 编辑

我想知道一种计算数字是整数还是双精度的方法,然后将其放入if-else语句中。
有人知道怎么做吗?

您可以编写自己的简单扩展,如:

extension FloatingPoint {
    var isInteger: Bool { rounded() == self }
}
用法:

2.0.isInteger // true
2.5.isInteger // false

请注意
Double.infinity.isInteger
及其负数都返回
true
,如Alexander在评论中所述

编辑
您可以为Double编写扩展函数:

extension Double {
  func isInteger() -> Bool {
    return self == floor(self)
  }
}
原始答案
当数字向下舍入时,您可以通过验证数字是否相同来检查:

func isInteger(nr: Double) -> Bool{
  return nr == floor(nr)
}
然后你可以这样使用它:

if isInteger(3.5) {
  print("this is an integer")
}

注意:
Double.infinity.isInteger
-Double.infinity.isInteger
都返回true。@LeoDabus这有点乱,是一个没有清晰流的双嵌套条件运算符。
isNormal
谓词甚至被否定,这使得读取起来更加困难。其他两个操作数可以按顺序交换。这段代码很聪明,我完全理解它是如何工作的,但阅读/解析/理解它需要付出比必要的更多的努力。我建议
!isNormal&(isZero | self==rounded())
,或者更好,用一个单独的
if
语句将其分解为两行。好主意,但我建议将其放在
Double
的扩展中。另外,省略
()
并在
if
谓词中添加一些空格。谢谢,我更新了答案!为了澄清一些术语:
Double
Int
是类型。无论它们的值是多少,
Double
始终是
Double
,而
Int
始终是
Int
。double可以保存一个恰好是整数的值(它是一个整数,可以被1整除,没有余数),但是
Int
永远不能保存“double”(可以是非整数的浮点值)