【Lua】自由小数精度的随机数

本文介绍如何在Lua中实现一个能够根据指定精度生成随机数的函数。由于Lua内置的随机数生成器无法满足不等精度的需求,作者通过字符串处理实现了这一功能。首先,将数字转换为字符串并分割小数部分,然后以最大和最小值的差值乘以`math.random()`的结果,加上最小值来获取随机数,并进行精度调整以确保一致。虽然存在性能问题,但测试结果显示分布较为均匀。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、需求

目前存在一个需求,提供一个随机数的函数,这个函数的最小和最大值之间的精度是不等的,取他们中间的一个随机数,使用Lua自带的方法是做不到的,需要自己封装一个函数来使用。

二、解决

Lua本身的限制

Lua取随机数目前只有三种方式。

local result = math.random() -- 返回一个0 ~ 1之间的随机小数
local result = math.random(100) -- 返回1 ~ 100之间的随机整数
local result = math.random(10,100) -- 返回10 ~ 100之间的随机整数
解决思路

我先寻找了一下Lua有没有取数字精度的api,发现没有。那么就要首先搞到一个取精度的方式

本意并不想使用字符串来处理,但是想来想去也没有想到更加简便的处理方式了。如果有更加优雅的实现方式,也可以在评论区告诉我。

先搞了一个分割字符串的函数,然后把数字转化成字符串用字符’.'(小数点)来分割。这样取到的表[2]一定是小数部分。没有取到[2]就说明这是一个整数。

接下来要以精度最高的数作为基准数字来处理。因为Lua取随机小数只有math.random(),并且范围是0~1,所以可以使用max和min之间的差值乘上这个值即可取得随机值,这个值再加上min就是想要获得的随机值。

但是这时候会出现一个问题,就是精度问题。math.random()取到的数精度很高,我在代码里对精度进行了取余然后四舍五入的运算,这样可以保证小数点精度一致性。

最终获得的值,经过一定测试后简单的认为分布比较均匀。

测试结果

(这水印也太挡视野了)

缺陷

性能问题
字符串处理性能应该是不好的,如果有更好的方式可以告诉我。

最终代码
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值