我有 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/