将浮点数添加到十进制数中

3

我有这段代码:

var weightSum: Float = 3.14159
let weightPerPortionGrams: Decimal =  0.999999
weightSum = weightSum + (weightPerPortionGrams)

这些数字只是例子。

我遇到了一个错误:

二进制运算符“+ =”不能应用于“Float”和“Decimal”类型。

有人知道怎么解决吗?


请自己一个忙,只使用“Double”作为您的十进制数类型进行工作。 - Joakim Danielson
4个回答

0
这是因为变量weightSumweightPerPortionGrams具有不同的类型。幸运的是,你可以在Swift中转换这些变量。
因此,为了使其工作,你应该将weightPerPortionGrams的类型转换为weightSum的类型,这样两个变量就成为相同的类型:
weightSum = weightSum + NSDecimalNumber(decimal: weightPerPortionGrams).floatValue

请注意,Decimal 可能无法很好地处理浮点数。
您还可以进行额外的转换,以确保我们使用的是 NSDecimalNumber 的方法,而不是 NSNumber 的方法:
let double = NSDecimalNumber(decimal: weightPerPortionGrams).doubleValue
weightSum = weightSum + Float(double)

我遇到了错误:无法使用类型为“(Decimal)”的参数列表调用类型为“Float”的初始化程序。 - traff

0

Decimal 转换为浮点数,您可以采用以下任一方法:

weightSum += Float(truncating: weightPerPortionGrams as NSNumber)

或者这个:

weightSum += (weightPerPortionGrams as NSNumber).floatValue

@GiovanniTerlingen 不是吗?在我的机器上可以。您使用的是Swift 4吗?错误信息是什么?您指的是哪个代码片段? - Sweeper
我尝试在4.1.2 http://online.swiftplayground.run/ 上运行它,但出现了错误:“无法将类型为'Decimal'的值强制转换为类型'NSNumber'”。 - gi097
有趣!我正在使用Xcode 9.3.1,因此是Swift 4.1.1。我想这就是为什么会有不同的结果。@GiovanniTerlingen - Sweeper
@mag_zbc 那这是在线.swiftplayground.run的问题吗? - Sweeper
我采用了略微不同的方法,使其在http://online.swiftplayground.run上运行,请查看我的答案。 - gi097
显示剩余2条评论

0

Swift需要两个变量具有相同的类型才能使用“+”运算符,因此在对它们求和之前,您需要将Decimal转换为Float类型或者反过来:

weightPerPortionGramsFloat = (weightPerPortionGrams as NSNumber).floatValue

或者

weightSumDecimal = (weightSum as NSNumber).decimalValue

2
Swift不需要两个变量是相同类型就可以使用“+”运算符 - 不需要。 - mag_zbc
它不需要吗?我还以为 Swift 中所有算术运算符都需要操作数是相同的类型。 - DasBoot

0

你好!

    func + (left: Float, right: Decimal) -> Float {
        return left + Float(right.description)!
    }

    var weightSum: Float = 3.14159
    let weightPerPortionGrams: Decimal =  0.999999

    weightSum = weightSum + weightPerPortionGrams

    print(weightSum)
    // prints 4.141589

希望能对你有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接