【问题标题】:know the highest digit of a number知道一个数字的最高位
【发布时间】:2016-11-09 15:45:33
【问题描述】:

我在 Xcode 8 中使用 swift 3 做一个应用程序,它是一个基本转换器,输入值是用按钮设置的:

@IBAction func inputButton(_ sender: UIButton)
{
    currentNumber = currentNumber * 10 + (the number I want to add)
    labelText.text = "\(currentNumber)"
}

它运行良好,但是当我输入大约 10 个数字时,应用程序崩溃了。在我为“currentnumber”设置新值的行之后,Xcode 向我显示了这个:

线程 1:EXC_BAD_INSTRUCTION(代码=EXC_INPOV,子代码=0x0)

【问题讨论】:

  • 崩溃时currentNumber的值是多少?
  • 我为 currentNumber 输入的任何值都会崩溃
  • 但是你说“当我输入大约 10 个数字时,应用程序崩溃了”。那么它崩溃时的最终值是多少?
  • currentNumber 的类型是什么?诠释?
  • 例如,这个数字可能是 230120203,如果我输入另一个数字(任何数字),它就会崩溃。这就是你的意思?

标签: ios swift3 base-conversion


【解决方案1】:

溢出是(谢天谢地)Swift 中的一个错误。

在实际执行计算之前,您可以通过检查值是否超过 Int.max 在代码中防止这种情况发生。

这里有一些代码可以帮助您入门:

guard let inputNumber = Int(inputString) else {
    labelText.text = "input not a number or out of range"
    return
}

guard currentNumber < (Int.max - inputNumber) / 10 else {
    labelText.text = "overflow"
    return
}

currentNumber = currentNumber * 10 + inputNumber
labelText.text = "\(currentNumber)"

【讨论】:

  • 我的想法,没错。但我想在回答之前确保 currentNumber 是一个 Int。
  • 有没有办法增加更多的数字?
  • @DiegoEsc 使用NSDecimalNumber 而不是Int
  • @nikolai 如何添加十进制数?谢谢
猜你喜欢
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
  • 2016-11-29
  • 2017-03-08
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
  • 1970-01-01
相关资源
最近更新 更多