Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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字符串到Int总是返回nil_Swift_String_Int - Fatal编程技术网

Swift字符串到Int总是返回nil

Swift字符串到Int总是返回nil,swift,string,int,Swift,String,Int,我试图将字符串转换为Int。看起来很简单,但出于某种原因,它总是返回nil 我只是在写一个简单的扩展来将美元转换成美分: func dollarsToCents() -> Int { var temp = self; temp = temp.replacingOccurrences(of: "$", with: "") temp = temp.replacingOccurrences(of: ",", with: "") if let number = I

我试图将字符串转换为Int。看起来很简单,但出于某种原因,它总是返回nil

我只是在写一个简单的扩展来将美元转换成美分:

func dollarsToCents() -> Int {
    var temp = self;
    temp = temp.replacingOccurrences(of: "$", with: "")
    temp = temp.replacingOccurrences(of: ",", with: "")

    if let number = Int(temp) {
        return number*100
    }

    return 0
}
我把温度设置为250.89美元。数字总是零。无论我如何将temp转换为Int,它总是为nil。有人知道我做错了什么吗?

问题是,删除货币符号后的字符串250.89无法转换为Int,因为250.89不是整数。因此,通过将代码转换为Double来修复代码

或者如果你的数字总是有两个小数位

func dollarsToCents() -> Int {
    var temp = self
    temp.removeAll { !("0"..."9" ~= $0) }
    return Int(temp) ?? 0
}
但我认为解决办法要容易得多。您的目标应该是将价格值保存为数字倍,。。。。然后你们不必把字符串转换成双精度,你们只需要把你们的数字乘以。然后,当您需要添加货币符号时,只需将值转换为字符串并添加$或使用NumberFormatter即可

问题是,删除货币符号后的字符串250.89无法转换为Int,因为250.89不是整数。因此,通过将代码转换为Double来修复代码

或者如果你的数字总是有两个小数位

func dollarsToCents() -> Int {
    var temp = self
    temp.removeAll { !("0"..."9" ~= $0) }
    return Int(temp) ?? 0
}
但我认为解决办法要容易得多。您的目标应该是将价格值保存为数字倍,。。。。然后你们不必把字符串转换成双精度,你们只需要把你们的数字乘以。然后,当您需要添加货币符号时,只需将值转换为字符串并添加$或使用NumberFormatter即可


我刚刚遇到了一个奇怪的边缘情况,在将字符串转换为Int时,请确保字符串中没有任何空格,无论是尾随空格还是前导空格

例如

如果date_buffer的值有前导或尾随空格,则此操作将失败

另一种边缘情况是字符串变量中有一个前导0,例如07


希望它能有所帮助:

我刚刚遇到了一个奇怪的边缘情况,只需添加这个-确保从字符串转换为Int时,字符串中没有任何尾随或前导的空格

例如

如果date_buffer的值有前导或尾随空格,则此操作将失败

另一种边缘情况是字符串变量中有一个前导0,例如07


希望有帮助:

使用数字格式,不要手动解析货币格式的字符串。我更新了我的问题。不确定它对你而不是我是如何工作的。@很可能他们测试的是整数字符串而不是十进制字符串。使用数字格式,不要手动解析货币格式的字符串。我更新了我的问题。不确定它对你而不是我的工作方式。@因此,他们很可能使用整数字符串而不是十进制字符串进行测试。NumberFormatter是一种方法。除了更简单之外,它还更灵活,如果您需要考虑其他地区,可以进行调整。例如,某些欧洲国家的句号和逗号在十进制表示法中是颠倒的,即123.456,78而不是123456.78。@CharlesSrstka它不仅仅是关于货币符号,这也与职位有关。英语是少数在金额前显示货币符号的语言之一。在我的语言中,格式为250,89美元。还有可能是负数,格式更为复杂。但是我们不知道实际的用例。@RobertDresler注意,您不必从字符串中删除任何字符,您也可以使用NumberFormatter来解析它。let price=$250.89 let formatter=NumberFormatter formatter.numberStyle=.currency let number=formatter.numberfrom:price!//25089@LeoDabus是的,需要明确的是,任何时候货币字符串需要转换为数字时都应该使用NumberFormatter,反之亦然。不过,我也同意回答者的观点,即首先最好将价格存储为双精度而不是字符串,在这种情况下,不需要将字符串转换为双精度。@LeoDabus哦,我明白了,它只是删除了。也就是说,你不必将它相乘,那么数字格式就是最好的选择。除了更简单之外,它还更灵活,如果您需要考虑其他地区,可以进行调整。例如,某些欧洲国家的句号和逗号在十进制表示法中是颠倒的,即123.456,78而不是123456.78。@CharlesSrstka它不仅仅是关于货币符号,这也与职位有关。英语是少数在金额前显示货币符号的语言之一。在我的语言中,格式为250,89美元。还有可能是负数,格式更为复杂。但是我们不知道实际的用例。@RobertDresler注意,您不必从字符串中删除任何字符,您也可以使用NumberFormatter来解析它。let price=$250.89 let formatter=NumberFormatter formatter.numberStyle=.currency let number=formatter.numberfrom:price!//25089@LeoDabus是的,为了清楚起见,任何时候货币字符串不存在时都应该使用NumberFormatter
d转换为数字,反之亦然。不过,我也同意回答者的观点,即首先最好将价格存储为双精度而不是字符串,在这种情况下,不需要将字符串转换为双精度。@LeoDabus哦,我明白了,它只是删除了。太多了,所以你不必乘以它
let price = 250.89
let formattedPrice = "$\(price)" // $250.89
let price = 250.89
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.currencyCode = "USD"
let formattedPrice = formatter.string(from: price as NSNumber)! // $250.89
for date in next_thirty_days {
    let date_buffer: String = date.description[8...9]
    date_list.append(Int(date_buffer)!)
}