step_decimals
2026/4/15大约 3 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — step_decimals
step_decimals
定义
step_decimals() 传入一个步长值,返回这个步长有几位小数。它帮你搞清楚一把"尺子"到底有多精细。
就像尺子上的刻度——毫米尺的最小刻度是 0.001 米,所以有 3 位小数;厘米尺的最小刻度是 0.01 米,有 2 位小数。你告诉 step_decimals() 一个步长值(比如 0.01),它就告诉你这个步长有几位小数(返回 2)。
函数签名
C#
// C# 没有直接等价的函数,需要手动实现
// 以下是一个常见的实现方式:
public static int StepDecimals(float step)
{
int decimals = 0;
while (Math.Abs(Mathf.Round(step) - step) > Mathf.Epsilon)
{
step *= 10.0f;
decimals++;
}
return decimals;
}GDScript
func step_decimals(step: float) -> int参数说明
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
step | float | 是 | 要检测小数位数的步长值(必须大于 0,否则结果无意义) |
返回值
int —— 步长值的小数位数。
常见对应关系:
| 输入 | 输出 | 说明 |
|---|---|---|
| 1.0 | 0 | 整数,没有小数位 |
| 0.1 | 1 | 十分位精度,1 位小数 |
| 0.01 | 2 | 百分位精度,2 位小数 |
| 0.001 | 3 | 千分位精度,3 位小数 |
| 0.0001 | 4 | 万分位精度,4 位小数 |
| 10.0 | 0 | 整数部分不影响小数位数 |
| 2.5 | 1 | 2.5 有 1 位小数 |
代码示例
C#
using Godot;
using System;
public partial class StepDecimalsExample : Node
{
// 手动实现 step_decimals 功能
private int StepDecimals(float step)
{
int _decimals = 0;
while (Math.Abs(Mathf.Round(step) - step) > Mathf.Epsilon)
{
step *= 10.0f;
_decimals++;
}
return _decimals;
}
public override void _Ready()
{
// 基本用法:查看不同步长的小数位数
GD.Print(StepDecimals(1.0f)); // 0
GD.Print(StepDecimals(0.1f)); // 1
GD.Print(StepDecimals(0.01f)); // 2
GD.Print(StepDecimals(0.001f)); // 3
GD.Print(StepDecimals(0.0001f)); // 4
// 实际场景:根据步长动态生成 UI 滑块的精度
float sliderStep = 0.25f;
int precision = StepDecimals(sliderStep);
GD.Print($"步长 {sliderStep} 需要 {precision} 位小数显示");
// 输出: 步长 0.25 需要 2 位小数显示
}
}GDScript
extends Node
func _ready():
# 基本用法:查看不同步长的小数位数
print(step_decimals(1.0)) # 0
print(step_decimals(0.1)) # 1
print(step_decimals(0.01)) # 2
print(step_decimals(0.001)) # 3
print(step_decimals(0.0001)) # 4
# 实际场景:根据步长动态生成 UI 滑块的精度
var slider_step = 0.25
var precision = step_decimals(slider_step)
print("步长 %s 需要 %d 位小数显示" % [slider_step, precision])
# 输出: 步长 0.25 需要 2 位小数显示注意事项
- 如果传入的
step为 0 或负数,返回值没有实际意义,请确保传入正数步长。 - C# 没有直接等价的函数,上面提供的手动实现方式通过不断乘以 10 并检查是否接近整数来计算小数位数。在绝大多数场景下可以正常工作,但对于浮点精度边界情况(比如极小的步长)可能不完全准确。
- 此函数常与 UI 控件配合使用——比如你知道滑块的步长是 0.01,就可以用
step_decimals(0.01)返回的 2 来设置数值显示格式(保留 2 位小数)。 - 浮点数的精度限制意味着步长非常小时(比如超过 6-7 位小数),结果可能不够准确,这是浮点数本身的存储方式决定的,并非函数的缺陷。
