前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >原生JS自己构建一个0-1之间的随机小数

原生JS自己构建一个0-1之间的随机小数

作者头像
FungLeo
发布2018-01-08 15:34:45
1.8K0
发布2018-01-08 15:34:45
举报

原生JS自己构建一个0-1之间的随机小数

前言

我们都知道使用Math.random()来得到一个随机数。但是很多人都没有深入的思考过,如何这个随机数是怎么来的。

我也不知道是怎么来的,只知道这是一个比较复杂的随机算法。那么我们有没有可能通过自己的代码来实现一个类似随机数呢?我实践了一下,是可以的。不过我的算法比较简单,所得的随机数不是那么随机。

目标,构建一个0-1之间随机小数

开干

我首先想到的是时间戳。所以,我在chrome控制台输入了

new Date()
// return
Thu May 04 2017 10:50:04 GMT+0800 (CST)
// 不是我想要的,我想要的是时间戳,所以,这样
+new Date()
// return
1493866864704
// 这个数字是会变化的,多执行几次
+new Date()
1493866908283
+new Date()
1493866908885
+new Date()
1493866909428
+new Date()
1493866909959
+new Date()
1493866910520
+new Date()
1493866911278

如上,多次执行之后,发现,前面基本不变,但是最后几位变化挺大的。原理很简单,后面是毫秒,当然变化快了。

如果倒过来,就应该差不多了,开干

// 先把数字变成字符串
+new Date()+''
// return
"1493867038901"
// 再把字符串变成数组
(+new Date()+'').split('')
// return
["1", "4", "9", "3", "8", "6", "7", "1", "2", "4", "7", "8", "2"]
// 再把数组倒排
(+new Date()+'').split('').reverse()
// return
["0", "0", "2", "2", "8", "1", "7", "6", "8", "3", "9", "4", "1"]
// 再把数组变成字符串
(+new Date()+'').split('').reverse().join('')
// return
"3274527683941"

果然倒过了。

我们需要的是0到1之间的小数,最简单的方法是,在最前面加上'0.',所以,代码是:

'0.'+(+new Date()+'').split('').reverse().join('')
// return
"0.9282437683941"

最后,我们得到的是一个字符串,而我们想要的是一个数字,所以:

+('0.'+(+new Date()+'').split('').reverse().join(''))
// return
0.5832047683941

好了,我们得到了一个获取随机数的方法了!

不过没什么卵用~,算是练了下脑子吧!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-05-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 原生JS自己构建一个0-1之间的随机小数
    • 前言
      • 开干
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档