关于js生成随机数。

秋风_irwin 2017-05-30 05:02:44
在lodash源码中,他是这样生成随机数的。。有一个地方不是特别看的懂

var freeParseFloat = parseFloat;
var nativeMin = Math.min,
nativeRandom = Math.random;
var rand = nativeRandom();
console.log(freeParseFloat('1e-' + ((rand + '').length - 1)));
console.log(nativeMin(0 + (rand * (5 - 0 + freeParseFloat('1e-' + ((rand + '').length - 1)))), 5));


其中他为什么要在确定数值范围后面加freeParseFloat('1e-' + ((rand + '').length - 1) ),这样一句,我打印出来是1e-17。
是为了修正还是什么?
...全文
211 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
秋风_irwin 2017-05-31
  • 打赏
  • 举报
回复
引用 1 楼 jslang 的回复:
freeParseFloat('1e-' + ((rand + '').length - 1) )应该是得出rand这个小数的有效精度中最小的精度位。 不过他应该先去掉小数点,不然会多出一位。
但是我对他这样写法还是很困惑。他这样有什么好处?
天际的海浪 2017-05-31
  • 打赏
  • 举报
回复
也可能是为了解决一些特定浏览器中的兼容问题,只是具体是什么问题我们不知道
秋风_irwin 2017-05-31
  • 打赏
  • 举报
回复
引用 3 楼 jslang 的回复:
[quote=引用 2 楼 blueblueskyhua 的回复:] [quote=引用 1 楼 jslang 的回复:] freeParseFloat('1e-' + ((rand + '').length - 1) )应该是得出rand这个小数的有效精度中最小的精度位。 不过他应该先去掉小数点,不然会多出一位。
但是我对他这样写法还是很困惑。他这样有什么好处?[/quote] 这个代码的意图好像是不让随机数超过5。不过可能是他的算法有问题,这么做没什么意义,有些多于了 [/quote] 但是照理说这么优秀的工具框架,不应该有这种低级错误。这段代码确实是生成区间内的随机数,我也是有点疑惑。感觉可能是自己忽略了一些什么。没明白他的用意。
天际的海浪 2017-05-31
  • 打赏
  • 举报
回复
引用 2 楼 blueblueskyhua 的回复:
[quote=引用 1 楼 jslang 的回复:] freeParseFloat('1e-' + ((rand + '').length - 1) )应该是得出rand这个小数的有效精度中最小的精度位。 不过他应该先去掉小数点,不然会多出一位。
但是我对他这样写法还是很困惑。他这样有什么好处?[/quote] 这个代码的意图好像是不让随机数超过5。不过可能是他的算法有问题,这么做没什么意义,有些多于了
天际的海浪 2017-05-30
  • 打赏
  • 举报
回复
freeParseFloat('1e-' + ((rand + '').length - 1) )应该是得出rand这个小数的有效精度中最小的精度位。 不过他应该先去掉小数点,不然会多出一位。

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧