Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果在Swift中是整数,则显示双精度整数_Swift - Fatal编程技术网

如果在Swift中是整数,则显示双精度整数

如果在Swift中是整数,则显示双精度整数,swift,Swift,我正在尝试编写一个方法来检查.0中的双端是否与其他任何东西相同。例如,检查它是2.0还是2.12345 如果它是2.0,那么我希望它只显示2,但是如果它是2.12345,那么显示2.12345 我想写一个func,它以Double作为参数并返回Int,但是如果输入结果是.12345,它就不能返回它 所以我想知道我所想的方法是否可以用于调整,或者是否有类似的方法 我在想,也许返回类型可以是Int和Double,但我不知道如何工作 这就是我目前所拥有的 private func checkIfW

我正在尝试编写一个方法来检查.0中的双端是否与其他任何东西相同。例如,检查它是2.0还是2.12345

如果它是2.0,那么我希望它只显示2,但是如果它是2.12345,那么显示2.12345

我想写一个func,它以Double作为参数并返回Int,但是如果输入结果是.12345,它就不能返回它

所以我想知道我所想的方法是否可以用于调整,或者是否有类似的方法

我在想,也许返回类型可以是Int和Double,但我不知道如何工作

这就是我目前所拥有的

  private func checkIfWholeNumber(displayedDouble: Double) -> Int {
    if displayedDouble.truncatingRemainder(dividingBy: 1) == 0 {
      return Int(displayedDouble)
    } else {
      return //
    }
  }

只需使用
四舍五入
功能即可

func check(val:Double)->Int?{
    let rounded = val.rounded()
    return rounded == val ? Int(rounded) : nil
}

若要在标签上显示,请将Double转换为数字,然后再转换为字符串

let i = 1.0
let j = 1.2345

// Value in String

let a = NSNumber(value: j).stringValue  // "1.2345"
let b = NSNumber(value: i).stringValue  // "1" 

// Value in Double

let c = NSNumber(value: i).doubleValue  // 1.0
let d = NSNumber(value: j).doubleValue  // 1.2345

Swift 4+

let i = 2.0
let j = 2.12345

let nf = NumberFormatter()
nf.maximumFractionDigits = 6

let a = nf.string(for: i) ?? "" // 2
let b = nf.string(for: j) ?? "" // 2.12345

对于另一个选项,此示例使用NumberFormatter()。我只是主观地将最大数字设置为6

您可能想在某个标签上显示此数字,对吗?您应该使用
NumberFormatter
。不检查数字是否为整数。@NiravD yes Iam@RubberDucky4444然后,您可以使用返回类型
String
代替
Int
Double
@RubberDucky4444,然后有两种更好的方法。如果要显示
1
1.2
1.23
,只需设置小数位数的最大值即可。如果要显示
1
1.20
1.23
,则另一种可能的解决方案是检查字符串是否以正则表达式
[,]00
结尾,如果是,则截断最后3个字符。顺便提一下,我确信这是一个重复的问题,但我找不到。请注意,
check(val:0.1+0.2-0.3)
返回
nil
——这可能是需要的,也可能不是。这是因为双精度。您输入的结果可以是
0.0000…00001
,或者确切地说(“在我的系统上”)
5.55111512312578e-17
,或者只是
“\(1.2345)”
让c=NSNumber(值:i)。doubleValue不返回
1
。相反,它返回
1.0
。答案应该是仅转换为NSNumber。