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

原生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

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏wym

HDU 6315 Naive Operations(线段树+懒惰标记)

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6315

20920
来自专栏wannshan(javaer,RPC)

dubbo负载均衡代码分析3(加权轮询策略)

接上篇 https://cloud.tencent.com/developer/article/1109577 加权轮询,我第一次没理解,个人觉得不好理解。于是...

41660
来自专栏老九学堂

【干货】小白如何熟练掌握C语言随机数!

随机数的使用,是不少小伙伴在学C语言过程中都会遇到的一个坎,今天老九为大家讲解如何在C语言中使用随机数。 通常情况下,使用最多的方法的就是使用rand函数随机生...

50470
来自专栏温安适的blog

union/find--不相交集合

37970
来自专栏木东居士的专栏

Bloom Filter 的基本原理和实现

Bloom Filter 是由 Burton H. Bloom 在 1970 年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集...

59320
来自专栏Python小屋

Python稀疏矩阵运算库scipy.sparse用法精要

1、稀疏矩阵的常见存储形式 bsr_matrix(arg1[, shape, dtype, copy, blocksize]) Block Sparse Row...

2.5K80
来自专栏Java爬坑系列

【Java入门提高篇】Day22 Java容器类详解(五)HashMap源码分析(上)

准备了很长时间,终于理清了思路,鼓起勇气,开始介绍本篇的主角——HashMap。说实话,这家伙能说的内容太多了,要是像前面ArrayList那样翻译一下源码,稍...

25450
来自专栏小樱的经验随笔

树链剖分简单分析及模板(杂谈)

这几天学习了一下树链剖分,顺便写一下我的理解、 早上看了一下别人的讲解,云里雾里,终于算是搞懂了、 树链剖分是解决在树上进行插点问线,插线问点等一系列树上的问题...

31240
来自专栏木东居士的专栏

Bloom Filter 的基本原理和实现

21940
来自专栏开发与安全

算法:队列与广度优先搜索(迷宫问题)

队列也是一组元素的集合,也提供两种基本操作:Enqueue(入队)将元素添加到队尾,Dequeue(出队)从队头取出元素并返回。就像排队买票一样,先来先服务,先...

37570

扫码关注云+社区

领取腾讯云代金券