go - 乘以 *float32 和 int 值

标签 go floating-point

我有 2 个字段需要相乘。一个是 *float32 字段,另一个是 int 字段。如何乘以这些字段?

var totalPrice *float32
var price *float32
var volume int

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

totalPrice = price * volume

最佳答案

您需要按原样使用类型转换转换 explained quickly here .在这种情况下,正如 mkopriva 在他的评论中强调的那样,您应该将 volume 变量的值转换为 float32。

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

假设 nil 值转换为零值,这里是完整的示例

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 的建议,尽量不要对货币值使用 float ,因为浮点运算不可靠。而是使用整数值,使用 1 作为当前货币的较低值,例如:

  • 1 = 1 便士(或)
  • 1 = 1 美分(或)
  • 1 = 1 centavo(以我为例)

关于go - 乘以 *float32 和 int 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55880818/

相关文章:

go - 关于套接字的 SO_REUSEADDR 不能在 golang 中正常工作吗?

go - 如何在测试中期待JSON

java - java中double的数学表示

java - log4j 将 float 打印为指数

php - 字节转换为 float (php)

http - 在golang fasthttp中获取任意请求 header value

go - 一个通用的 golang 装饰器(要点需要澄清)

go - 给定方法值,获取接收者对象

c - ( float )类型转换不起作用

MySQL浮点比较问题