当前位置: 首页 > news >正文

工具函数-算法

1. 实现四舍五入,保留两位小数

const v = 0.0635455;
// 方式1,保留2位小数,返回的是number格式
const formatted = Math.round(v * 100) / 100;
// 方式2,保留2位小数,返回的是字符串格式
const formatted = v.toFixed(2);

在使用浮点数运算时,有时会出现无限循环的情况,这是由于浮点数在转换成二进制的时候就会出现。将浮点数转换为二进制形式的过程如下:

  1. 将整数部分转换为二进制:

    • 将整数部分除以 2,记录余数,直到商变为 0。余数倒序排列即为整数部分的二进制形式。
  2. 将小数部分转换为二进制:

    • 将小数部分乘以 2,取整数部分作为二进制位,小数部分继续乘以 2,直到小数部分为 0 或达到所需的精度。

举例:一个典型的例子就是 0.1 这个值,将 0.1 转换为二进制的过程如下:

  1. 小数部分 0.1 乘以 2:
    • 0.1 × 2 = 0.2 (取整数部分 0)
  2. 小数部分 0.2 乘以 2:
    • 0.2 × 2 = 0.4 (取整数部分 0)
  3. 小数部分 0.4 乘以 2:
    • 0.4 × 2 = 0.8 (取整数部分 0)
  4. 小数部分 0.8 乘以 2:
    • 0.8 × 2 = 1.6 (取整数部分 1)

重复这个过程,我们会发现小数部分会产生一个无限循环的二进制序列。
因此尽量不要直接将对浮点数的运算结果直接展示出来。

2. 随机数算法

生成一个固定范围的随机数:min + (max-min)*Math.random()

生成一个随机排列 [1, 2, 3, 4].sort((a, b) => return Math.random() - 0.5)

快速取整:<< 0和 >> 0都是取整,是js里性能最快的取整,不管正负数都是去掉小数部分;和Math.floorMath.ceilMath.round不一样。
例如: 1.23 >> 0 -> 1 -2.59 << 0 -> -2

3. 轮播图取值

取值逻辑 fix: i => ((i % length) + length) % length

这个函数的作用是修正给定的索引 i,使其始终处于 0length-1 的范围内。这对于轮播组件非常有用,因为当用户点击上一个或下一个按钮时,索引可能会超出 0length-1 的范围。

这个函数的实现原理如下:

  1. i % length: 这个操作可以将 i 限制在 0length-1 的范围内。但是,如果 i 为负数,这个操作会返回一个负数。

  2. (i % length) + length: 这个操作可以确保结果始终为非负数。如果 i 为负数,i % length 会返回一个负数,但加上 length 后会变成一个正数。

  3. ((i % length) + length) % length: 这个最后的取模操作可以确保结果在 0length-1 的范围内。即使 (i % length) + length 的结果大于 length,取模操作也会将其缩减到 0length-1 的范围内。

总之,这个 fix 函数可以确保无论 i 的值是多少,它都会被修正为 0length-1 之间的一个合法索引。这对于轮播组件的实现非常重要,可以确保组件的行为是可预测的,无论用户的操作如何。

http://www.lryc.cn/news/378616.html

相关文章:

  • C# yolov8 OpenVINO 同步、异步接口视频推理
  • 【STM32入门学习】定时器与PWM的LED控制
  • PyTorch实战:模型训练中的特征图可视化技巧
  • 有人@你!神工坊知识问答第二期中奖名单新鲜出炉
  • 数据结构篇:旋转操作在AVL树中的实现过程
  • 为什么Java默认使用UTF-16,Golang默认使用UTF-8呢?
  • JavaScript常见面试题(三)
  • 【Effective Modern C++】第1章 型别推导
  • 服装连锁实体店bC一体化运营方案
  • IDEA中SpringMVC的运行环境问题
  • Python初体验
  • 从零开始如何学习人工智能?
  • 【仿真建模-anylogic】动态生成ConveyorCustomStation
  • 如何使用idea连接Oracle数据库?
  • 谈谈kafaka的并行处理,顺带讲讲rabbitmq
  • P3056 [USACO12NOV] Clumsy Cows S
  • 智赢选品,OZON数据分析选品利器丨萌啦OZON数据
  • Canal自定义客户端
  • 20240621将需要自启动的部分放到RK3588平台的Buildroot系统的rcS文件中
  • 掌握数据魔方:Xinstall引领ASA全链路数据归因新纪元
  • IIS代理配置-反向代理
  • Flutter调用本地web
  • AI大模型部署Ubuntu服务器攻略
  • vlan、vxlan、vpc学习
  • 低代码开发:加速工业数智化转型发展
  • python“__main__“的解读
  • Linux Debian12使用podman安装pikachu靶场环境
  • 跑通并使用Yolo v5的源代码并进行训练—目标检测
  • 需求虽小但是问题很多,浅谈JavaScript导出excel文件
  • phar反序列化及绕过