Golang中结构体和接口的问题解析
Golang中结构体和接口的问题解析 我们编写的代码如下:
package main
import "fmt"
type Rectangle struct {
Length, Width float32
}
type Circle struct {
Radius float32
}
func (r *Rectangle) Area() float32 {
return r.Length * r.Width
}
func (r *Rectangle) Perimeter() float32 {
return 2 * (r.Length + r.Width)
}
func (c *Circle) Area() float32 {
const PI float32 = 3.144444444444
return PI * (c.Radius * c.Radius)
}
func (c *Circle ) Circumference() float32 {
const PI float32 = 3.14444444444
return 2 * (PI * c.Radius)
}
func main() {
var r Rectangle
var c Circle
var first float32
fmt.Scanln(&first)
var second float32
fmt.Scanln(&second)
var third float32
fmt.Scanln(&third)
r.Length = first
r.Width = second
c.Radius = third
fmt.Println(r.Area())
fmt.Println(r.Perimeter())
fmt.Println(c.Area())
fmt.Println(c.Circumference())
}
这里第一个输入是5,第二个是6,第三个是5。
我们的问题在于圆的输出似乎存在一些浮点数问题,不确定哪里出错了,因此需要建议。
你的输出 30 22 78.611115 31.444445
期望的输出 30 22 78.53981633974483 31.41592653589793
更多关于Golang中结构体和接口的问题解析的实战教程也可以访问 https://www.itying.com/category-94-b0.html
4 回复
不确定我们哪里出错了
你将 PI 定义为 3.1444444,但这并不是 PI 的值。你期望的输出使用了正确的 PI 值。PI 在 math 包中已有定义,所以请直接使用那里的值:math package - math - Go Packages
问题出在圆周率常量的精度上。Go语言中float32类型精度有限,而您使用的π值精度不足。以下是修正后的代码:
package main
import (
"fmt"
"math"
)
type Rectangle struct {
Length, Width float32
}
type Circle struct {
Radius float32
}
func (r *Rectangle) Area() float32 {
return r.Length * r.Width
}
func (r *Rectangle) Perimeter() float32 {
return 2 * (r.Length + r.Width)
}
func (c *Circle) Area() float32 {
return float32(math.Pi) * (c.Radius * c.Radius)
}
func (c *Circle) Circumference() float32 {
return 2 * float32(math.Pi) * c.Radius
}
func main() {
var r Rectangle
var c Circle
var first float32
fmt.Scanln(&first)
var second float32
fmt.Scanln(&second)
var third float32
fmt.Scanln(&third)
r.Length = first
r.Width = second
c.Radius = third
fmt.Println(r.Area())
fmt.Println(r.Perimeter())
fmt.Println(c.Area())
fmt.Println(c.Circumference())
}
主要修改:
- 导入
math包,使用math.Pi常量(float64精度) - 将
math.Pi转换为float32类型以保持类型一致 - 移除自定义的低精度π常量
使用math.Pi(约3.141592653589793)能获得更精确的计算结果。输入5,6,5时,输出将接近期望值:
- 圆面积:78.53982
- 圆周长:31.415928
注意:由于float32精度限制,结果仍会与float64计算的结果有细微差异。如果需要更高精度,建议将结构体字段类型改为float64。


