* float32和int值相乘

时间:2019-04-27 13:02:36

标签: go floating-point

我有2个字段必须相乘。一个是*float32字段,另一个是int字段。如何将这些字段相乘?

var totalPrice *float32
var price *float32
var volume int

此代码无效。我收到错误消息... mismatched types *float32 ...

totalPrice = price * volume

1 个答案:

答案 0 :(得分:1)

您需要像使用explained quickly here一样使用类型转换进行转换。在这种情况下,正如mkopriva在其注释中突出显示的那样,您应该将volume变量的值转换为float32。

还允许显示一种处理在应用程序级别中具有含义的nil值的方法,为此,我编写了带有第二个参数的float32PtrToFloat(* float32,float32),该参数允许您指定应采用哪个值代替零。

假设一个零值转换为零值,下面是完整的示例

package main

import (
    "fmt"
)

func main() {
    var totalPrice *float32
    var price *float32
    var volume int

    var total = float32PtrToFloat(price, 0) * float32(volume)
    totalPrice = &total
    fmt.Println(*totalPrice)

}

func float32PtrToFloat(price *float32, valueIfNil float32) float32 {
    if price == nil {
        return valueIfNil
    } else {
        return *price
    }
}

然后,按照JimB的建议进行个人阅读,请不要对货币值使用浮点数,因为浮点算法不可靠。而是使用整数值,将1用作当前货币的下限值,例如:

  • 1 = 1便士(或)
  • 1 = 1美分(或)
  • 1 = 1 centavo(就我而言)