js02.date和Math函数

本文介绍了JavaScript中日期对象的创建及使用方法,并详细解释了如何获取日期的不同部分(如年、月、日等)。此外,还涵盖了JavaScript中的常用数学函数,包括向上取整、向下取整、求最大值、求最小值、计算次方、四舍五入以及生成随机数。

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

date日期写法

<script type="text/javascript">
var mydate=new Date();    
    通过new的方法创建新的日期对象。
alert(Date());   
    创建(返回)一个完整的日期时间
alert(mydate.getDay());
    创建(返回)当前是周几的数据
alert(mydate.getMonth()+1); 
    创建(返回)当前是几月的数据(因为默认1月为0,所以要加1才能正确显示当前月份)
alert(mydate.getFullYear());  
    创建(返回)当前年份
alert(mydate.getHours());
    创建(返回)当前的小时
alert(mydate.getMinutes());
    创建(返回)当前分钟
alert(mydate.getSeconds());
    创建(返回)当前秒数

Math 函数

  1. Math.ceil() 天花板函数,向上取整数

    Math.ceil (向上取整数,eg:3.21 取值为4,数值不会四舍五入,而是向上取接近的整数)

<script type="text/javascript">
    var n1=12;     取值结果为12
    var n2=1.23;   取值结果为2
    var n3=3.98;   取值结果为4
    var n4=-12.01; 取值结果为-12
    var n5=Math.ceil(n4);   取值结果为12
    alert(n5);    取值结果为12
  • 若数值为整数,那函数取值为本身。
  • 若数值为小数,那函数取值为本身进1的整数。

2.Math.floor() 地板函数 向下舍入取整
Math.floor(向下取整数)

<script type="text/javascript">
    var n1=12;     取值结果为12
    var n2=1.23;   取值结果为1
    var n3=3.98;   取值结果为3
    var n4=-12.01; 取值结果为-13
    var n5=Math.ceil(n4);   取值结果为-13
    alert(n5);    取值结果为-13
  • 若数值为整数,那函数取值为本身。
  • 若数值为小数,那函数取值为本身去掉小数点后面的整数。

3.Math.max() 取几个数值中的最大值

<script type="text/javascript">
    var n1=12;      
    var n2=1.23;   
    var n3=3.98;  
    var n4=-12.01; 
    var n5=Math.max(n1,n4);   取值结果为12
    alert(n5);    取值结果为12

4.Math.min() 取几个数值中的最小值

<script type="text/javascript">
    var n1=12;      
    var n2=1.23;   
    var n3=3.98;  
    var n4=-12.01; 
    var n5=Math.min(n3,n1,n4);   取值结果为-12.01
    alert(n5);    取值结果为-12.01

5.Math.pow () 次方

<script type="text/javascript">
    var n1=12;      
    var n2=1.23;   
    var n3=3.98;  
    var n4=-12.01; 
    var n5=Math.pow(n1,n2);   取值结果为n1的n2次方
    alert(n5);    取值结果为n1的n2次方

6.Math.round() 四舍五入

<script type="text/javascript">
    var n1=12;      
    var n2=1.23;   
    var n3=3.98;  
    var n4=-12.01; 
    var n5=Math.round(n2); 取值结果为1
    alert(n5);   取值结果为1

7.Math.random() 返回0-1之间的随机数,每次刷新都不同不包括0和1

<script type="text/javascript">
    var n1=12;      
    var n2=1.23;   
    var n3=3.98;  
    var n4=-12.01; 
    var n5=Math.random();    ()里无需添加东西
    alert(n5);

这里写图片描述

demo:

这里写图片描述

<script type="text/javascript">
    alert(Math.pow(((23+Math.pow(5,7))/45),2));
</script>

这里写图片描述

<script type="text/javascript">
    alert(Math.floor(Math.random()*10));
</script>

注:先给一个0-1之间的随机函数为Math.random(),然后乘以10为0-10之间的随机数,再给一个向下取整的函数,结果就是0-9之间的随机整数。

<think>嗯,用户想让我把JavaScript里的Math.floorMath.random换成自己手动实现的版本。首先,我需要理解这两个函数的作用。Math.random()返回一个介于0(包含)1(不包含)之间的浮点数伪随机数。而Math.floor()则是向下取整的函数,比如Math.floor(3.7)得到3。 那怎么手动实现它们呢?先考虑Math.random的替代方案。常见的伪随机数生成算法有线性同余生成器(LCG)。LCG的公式是Xₙ₊₁ = (a * Xₙ + c) % m。选择合适的参数很重要,比如a、c、m的值。通常使用m为2³²,a=1664525,c=1013904223,这样生成的随机数周期较长。不过用户可能需要一个简单的例子,所以我可以选较小的参数,比如a=214013,c=2531011,m=2³²,但种子需要管理,每次调用后更新种子。 然后是Math.floor的问题。手动实现的话,就是去掉小数部分。对于正数,可以用位运算,比如与0进行按位或,或者用parseInt,或者用减去小数部分的方法。比如,num - (num % 1),或者用位运算num | 0。不过要注意负数的处理,比如Math.floor(-3.2)是-4,而用num | 0的话,-3.2 | 0得到-3,这就不对了。所以需要判断正负,如果是负数且有小数部分,就减去1再取整。或者用更通用的方法:num >=0 ? parseInt(num) : (num %1 ===0 ? num : parseInt(num -1))。不过这样可能效率不高,但手动实现的话,可以接受。 接下来,我需要把这些思路整理成代码。比如,实现一个自己的random函数,使用LCG算法,然后实现floor函数处理各种情况。还要注意种子的初始化维护,可能需要一个闭包来保存种子状态。用户可能需要一个独立的实现,不依赖内置函数,所以不能用Date.now()作为种子,而是让用户自己设置或者固定种子。 然后测试一下,比如生成一些随机数,检查范围是否正确,floor函数是否正确处理正负数小数。例如,floor(3.7)应该得到3,floor(-3.2)得到-4,floor(5)还是5。 可能的问题点:LCG生成的随机数质量可能不如Math.random,但作为手动实现,已经足够。另外,种子管理需要每次调用后更新,否则会生成相同的值。用户可能需要了解如何设置种子,所以在示例中应该初始化一个种子,比如用当前时间戳,或者让用户自己输入。 最后,把代码示例写出来,并解释每一步的作用。确保替换后的函数在原有代码中能正确工作,比如生成指定范围的整数时,用自定义的randomfloor代替原来的方法。</think>以下将分步骤说明如何手动实现JavaScript中`Math.floor()``Math.random()`的核心逻辑: --- ### 一、手动实现 `Math.random()` **目标**:生成一个 [0,1) 之间的伪随机数 **实现方案**:使用线性同余生成器 (LCG) 算法 **代码示例**: ```javascript let seed = Date.now(); // 初始化种子 function myRandom() { const a = 1664525; // 乘数 const c = 1013904223; // 增量 const m = 2 ** 32; // 模数 seed = (a * seed + c) % m; // 更新种子 return seed / m; // 映射到 [0,1) } ``` **原理说明**: 1. 通过递推公式 `Xₙ₊₁ = (a * Xₙ + c) % m` 生成新种子 2. 将种子值除以模数 `m` 映射到 [0,1) 区间 3. 每次调用会改变内部种子状态 --- ### 二、手动实现 `Math.floor()` **目标**:对数字进行向下取整 **实现方案**:利用类型转换位运算 **代码示例**: ```javascript function myFloor(num) { if (num >= 0 || num % 1 === 0) { return num - (num % 1); // 直接去除小数部分 } else { return num - (num % 1) - 1; // 负数且非整数时多减1 } } ``` **原理说明**: - 正数或整数直接通过 `num - (num % 1)` 去除小数 - 负小数需要额外减1(如:-3.2 → -4) --- ### 三、组合使用示例 **生成 [min,max] 的随机整数**: ```javascript function getRandomInt(min, max) { return myFloor(myRandom() * (max - min + 1)) + min; } // 用法:getRandomInt(1,10) 生成 1-10 的整数 ``` --- ### 四、验证测试 1. **随机性测试**:连续调用`myRandom()`观察数值分布 2. **取整测试**: ```javascript console.log(myFloor(3.7)); // 3 console.log(myFloor(-3.2)); // -4 console.log(myFloor(5)); // 5 ``` --- ### 注意事项 1. LCG算法生成的随机数质量低于原生实现,但能满足基本需求 2. 手动floor需要考虑NaN非法输入的处理 3. 可通过修改LCG参数调整随机数特性(如周期长度) 这种实现方式虽然性能低于原生方法,但有助于理解底层原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jojo999888

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值