尝试将字符串转换为双精度时出错

Posted

技术标签:

【中文标题】尝试将字符串转换为双精度时出错【英文标题】:Error when trying to convert string to a double 【发布时间】:2015-02-18 06:55:17 【问题描述】:

我正在尝试在 Swift 中将 String 转换为 Double 值。在做了很多研究之后,我相信这将是把我的字符串变成 Double 的最好方法。但是现在我遇到了一个我不知道如何解决的错误。

var purchaseAmount: Double = 200

var cashTendered: Double = 425.45

var changeRequired: Double = 0

var currencyValues = ["100", "50", "20", "10", "5", "2", "1", "0.50", "0.20", "0.10", "0.05"]

import Cocoa

if cashTendered < purchaseAmount 
    println("Not enough cash tendered")
 else 
    changeRequired = cashTendered - purchaseAmount
    for currency in currencyValues 
        var doubleCurrency = (currency as NSString).doubleValue
        var amountOfCurrency = changeRequired / doubleCurrency
        amountOfCurrency = floor(amountOfCurrency)
        changeRequired = changeRequired - (amountOfCurrency * currency)
        changeRequired = round(changeRequired * 100)/100
        println("$\(currency) X \(Int(amountOfCurrency))")
    

这是错误:

我该怎么做才能解决这个问题?

【问题讨论】:

图片通常会有所帮助,但当涉及到代码时,最好使用旧的纯文本格式 @Antonio 我在文本中添加了代码 代码和图片不匹配。您现在看到的实际错误是什么? 请大家在您对问题投反对票时添加评论,尤其是对于新用户。这是普通的礼貌。 这是另一个很好的例子,为什么你不应该忽略显式类型定义。 【参考方案1】:

首先初始化String数组,如下所示:

let currencyValues : [String] = ["100", "50", "20", "10", "5", "2", "1", "0.50", "0.20", "0.10", "0.05"]

但是它不是必需的类型声明,因为 Swift 具有重要的功能Type Interface。但大多数做法是在使用数组时定义类型。

关于将字符串转换为双精度,您可以使用以下代码:

for currency : String in currencyValues 
   let doubleCurrency = NSNumberFormatter().numberFromString(currency)!.doubleValue
   print(doubleCurrency)

【讨论】:

【参考方案2】:

发布代码比图片更容易查看,但如果所有其他方法都失败了,还有 NSNumberFormatter。 NSNumberFormatter 的其他优点是允许您转换两个方向并获得像货币这样的良好输出。

【讨论】:

对于这个任务,我只需要将字符串转换为Double值,这样我就可以进行一些计算了。

以上是关于尝试将字符串转换为双精度时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用逗号时将字符串转换为双精度

将变体转换为双精度时出错 [ Delphi XE + IBObjects 4.9.12 ]

将字符串转换为双精度 [重复]

将字符串转换为双精度的最佳方法

将字符串转换为双精度,[重复]

将字符串转换为双精度的 C++ 错误