英文:
Go uint8 to float32
问题
我正在尝试学习Go语言,并且正在开发一个雨强度工具。对于这个工具,我需要进行如下计算:
var intensity float32
intensity = 10^((value−109)÷32)
其中,value是一个取值范围为0到255的uint8类型的变量,而intensity是一个float32类型的变量。
然而,Go告诉我:
无法将10 ^ (value - 109) / 32 (类型为uint8)分配给float32类型
我该如何解决这个问题?
英文:
I'm trying to learn Go and working on a rain intensity tool.
For this tool I have to make a calculation like this:
var intensity float32
intensity = 10^((value−109)÷32)
The value is an uint8
, ranging from 0 to 255. The intensity variable is a float.
However, Go tells me that
> cannot use 10 ^ (value - 109) / 32 (type uint8) as type float32 in assignment
How can I solve this?
答案1
得分: 3
- Go语言中没有
÷
运算符,^
是按位异或运算符,你需要使用math
包中的Pow
函数。 - Go语言对类型转换非常严格,在许多情况下不允许隐式类型转换(例如无符号整数到浮点数的转换是无效的),所以你需要使用
type(expr)
来显式地进行转换,例如float32(1)
。
因此,代码可以这样写:
intensity := float32(math.Pow(10, float64((value - 109) / 32)))
// - 或者 -
intensity := float32(math.Pow10(int((value - 109) / 32)))
英文:
- There is no
÷
operator in Go and^
is a bitwise XOR, you need to usePow
functions frommath
package - Go is very strict about type conversions, so it disallows implicit type conversions in many cases (so unsigned integer to floating point is not valid), so you need explicitly convert it with
type(expr)
, i.e.float32(1)
That said:
intensity = float32(math.Pow(10, float64((value - 109) / 32)))
// - OR -
intensity = float32(math.Pow10(int((value - 109) / 32)))
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论