round
2026/4/14大约 4 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — round
round
定义
round() 是一个四舍五入的数学函数。它的工作方式和我们生活中常说的"四舍五入"一样——看小数部分,超过一半(0.5)就往上进,不到一半就往下舍。
打个比方:你去菜市场买菜,称了 3.7 斤西红柿,老板说"四舍五入,算你 4 斤"。如果称了 3.2 斤,老板就说"算 3 斤"。round(3.7) 返回 4.0,round(3.2) 返回 3.0。
那如果恰好是 3.5 呢?在 GDScript 中,round 会往上进——返回 4.0。这就是"四舍五入"的标准规则:等于 0.5 时进位。
函数签名
C#
// Mathf.Round 返回 float 类型
// 注意:默认使用"银行家舍入"规则
public static float Round(float s)GDScript
func round(x: float) -> float参数说明
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
| x / s | float | 是 | 需要四舍五入的浮点数值 |
返回值
类型: float
返回 x 四舍五入到最近整数后的结果,类型仍然是浮点数(比如 4.0 而不是 4)。
| 输入值 | 返回值 | 说明 |
|---|---|---|
3.4 | 3.0 | 小数部分 < 0.5,舍去 |
3.6 | 4.0 | 小数部分 > 0.5,进位 |
3.5 | 4.0 | 恰好 0.5,向上进位 |
-3.4 | -3.0 | 负数同理 |
-3.6 | -4.0 | 负数同理 |
-3.5 | -4.0 | 负数恰好 0.5,向远离零的方向进位 |
代码示例
基础用法
C#
using Godot;
using System;
public partial class RoundExample : Node
{
public override void _Ready()
{
// 正数四舍五入
GD.Print(Mathf.Round(3.4f)); // 运行结果: 3
GD.Print(Mathf.Round(3.6f)); // 运行结果: 4
// 恰好 0.5 的情况(C# 默认"银行家舍入",0.5 舍入到偶数)
GD.Print(Mathf.Round(2.5f)); // 运行结果: 2(舍入到偶数)
GD.Print(Mathf.Round(3.5f)); // 运行结果: 4(舍入到偶数)
// 负数四舍五入
GD.Print(Mathf.Round(-3.4f)); // 运行结果: -3
GD.Print(Mathf.Round(-3.6f)); // 运行结果: -4
}
}GDScript
func _ready():
# 正数四舍五入
print(round(3.4)) # 运行结果: 3.0
print(round(3.6)) # 运行结果: 4.0
# 恰好 0.5 的情况(向上进位)
print(round(2.5)) # 运行结果: 3.0
print(round(3.5)) # 运行结果: 4.0
# 负数四舍五入
print(round(-3.4)) # 运行结果: -3.0
print(round(-3.6)) # 运行结果: -4.0实际场景:显示伤害数值(整数显示更直观)
C#
using Godot;
using System;
public partial class DamageDisplay : Node
{
// 计算伤害并四舍五入显示
private int CalculateDamage(float baseDamage, float defenseMultiplier)
{
float finalDamage = baseDamage * defenseMultiplier;
// 使用 AwayFromZero 与 GDScript 的 round() 行为一致
return (int)Math.Round(finalDamage, MidpointRounding.AwayFromZero);
}
public override void _Ready()
{
float baseDmg = 35.7f;
float def = 0.75f;
int damage = CalculateDamage(baseDmg, def);
GD.Print($"基础伤害: {baseDmg}, 防御系数: {def}, 最终伤害: {damage}");
// 运行结果: 基础伤害: 35.7, 防御系数: 0.75, 最终伤害: 27
int damage2 = CalculateDamage(20.3f, 1.5f);
GD.Print($"最终伤害: {damage2}");
// 运行结果: 最终伤害: 30
}
}GDScript
extends Node
# 计算伤害并四舍五入显示
func calculate_damage(base_damage: float, defense_multiplier: float) -> int:
var final_damage = base_damage * defense_multiplier
return int(round(final_damage))
func _ready():
var base_dmg := 35.7
var def := 0.75
var damage := calculate_damage(base_dmg, def)
print("基础伤害: %s, 防御系数: %s, 最终伤害: %d" % [base_dmg, def, damage])
# 运行结果: 基础伤害: 35.7, 防御系数: 0.75, 最终伤害: 27
var damage2 := calculate_damage(20.3, 1.5)
print("最终伤害: %d" % damage2)
# 运行结果: 最终伤害: 30进阶用法:保留 N 位小数的通用方法
C#
using Godot;
using System;
public partial class RoundAdvanced : Node
{
// round() 只能取整到整数位
// 如果需要保留 N 位小数,可以自己乘再除
private float RoundToDecimalPlaces(float value, int places)
{
float factor = Mathf.Pow(10, places);
return (float)Math.Round(value * factor, MidpointRounding.AwayFromZero) / factor;
}
public override void _Ready()
{
float pi = 3.14159f;
float rounded1 = RoundToDecimalPlaces(pi, 2);
GD.Print($"PI 保留 2 位小数: {rounded1}");
// 运行结果: PI 保留 2 位小数: 3.14
float rounded2 = RoundToDecimalPlaces(pi, 3);
GD.Print($"PI 保留 3 位小数: {rounded2}");
// 运行结果: PI 保留 3 位小数: 3.142
// 速度数值显示
float speed = 123.4567f;
float displaySpeed = RoundToDecimalPlaces(speed, 1);
GD.Print($"速度: {displaySpeed} m/s");
// 运行结果: 速度: 123.5 m/s
}
}GDScript
extends Node
# round() 只能取整到整数位
# 如果需要保留 N 位小数,可以自己乘再除
func round_to_decimal_places(value: float, places: int) -> float:
var factor = pow(10, places)
return round(value * factor) / factor
func _ready():
var pi = 3.14159
var rounded1 = round_to_decimal_places(pi, 2)
print("PI 保留 2 位小数: %s" % rounded1)
# 运行结果: PI 保留 2 位小数: 3.14
var rounded2 = round_to_decimal_places(pi, 3)
print("PI 保留 3 位小数: %s" % rounded2)
# 运行结果: PI 保留 3 位小数: 3.142
# 速度数值显示
var speed = 123.4567
var display_speed = round_to_decimal_places(speed, 1)
print("速度: %s m/s" % display_speed)
# 运行结果: 速度: 123.5 m/s注意事项
返回值是 float,不是 int:
round()返回浮点数(如4.0),如果你需要整数类型,在 C# 中用Mathf.RoundToInt(x)或(int)Mathf.Round(x);在 GDScript 中用int(round(x))。C# 和 GDScript 的 0.5 舍入规则不同:这是一个重要的差异!
- GDScript 的
round()使用"四舍五入远离零"规则:2.5变3,-2.5变-3。 - C# 的
Mathf.Round()默认使用"银行家舍入"规则:2.5变2(舍入到偶数),3.5变4。 - 如果 C# 需要与 GDScript 行为一致,请使用
Math.Round(x, MidpointRounding.AwayFromZero)。
- GDScript 的
与
floor()/ceil()的对比:round(3.7)= 4(四舍五入)floor(3.7)= 3(永远向下)ceil(3.7)= 4(永远向上)- 根据你的需求选择合适的函数。
round() 只能取整到整数:如果你想保留 N 位小数,需要先乘以 10^N,取整后再除以 10^N(参见进阶用法示例)。
