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

前端大额计算,真正解决js精度丢失问题

1.解决前端大额计算导致精度丢失问题

2.从底层上解决这个问题,计算时不使用js 运行时计算。

  1. 使用rust语言来解决这个问题,因为是底层语言,不涉及到精度问题。

3.实现步骤

步骤 1: 安装工具
确保你已经安装了Rust工具链和wasm-pack,wasm-pack 是用于构建、优化和打包Rust代码为WebAssembly的工具
步骤 2: 创建新的Rust项目
在命令行中运行以下命令以创建一个新的Rust库项目:

cargo new --lib wasm_math
cd wasm_math

步骤 3: 添加依赖
在Cargo.toml中添加wasm-bindgen依赖项。

[lib]
crate-type = ["cdylib"][dependencies]
wasm-bindgen = "0.2"

步骤 4: 编写Rust代码
接下来,在src/lib.rs中编写需要的Rust函数,如下所示:

use wasm_bindgen::prelude::*;#[wasm_bindgen]
pub fn add(a: f64, b: f64) -> f64 {a + b
}#[wasm_bindgen]
pub fn subtract(a: f64, b: f64) -> f64 {a - b
}#[wasm_bindgen]
pub fn multiply(a: f64, b: f64) -> f64 {a * b
}#[wasm_bindgen]
pub fn divide(a: f64, b: f64) -> f64 {if b == 0.0 {panic!("Cannot divide by zero!");}a / b
}

确保使用#[wasm_bindgen]属性标记你的函数,这能够使这些函数能够在编译成Wasm后被JavaScript调用。
步骤 5: 构建WebAssembly包
在项目目录中运行wasm-pack以构建Wasm包。

wasm-pack build --target web

步骤 6: 在JavaScript中使用Rust函数
在构建完成后,你可以在pkg目录中找到生成的Wasm文件和一个用于加载Wasm模块的JavaScript封装文件。
在HTML文件中,可以这样使用这个Wasm模块:

<!DOCTYPE html>
<html>
<head><title>Rust + Wasm</title><script type="module">import init, { add, subtract, multiply, divide } from './pkg/wasm_math.js';async function run() {await init();console.log("2 + 3 =", add(2, 3));console.log("5 - 1 =", subtract(5, 1));console.log("3 * 4 =", multiply(3, 4));console.log("10 / 2 =", divide(10, 2));}run();</script>
</head>
<body><h1>Check the console for output!</h1>
</body>
</html>

4. 简单模拟了一下计算场景和思路,现在只支持整数,不支持浮点数

5. 我把支持浮点数包放在giehub上了。

https://github.com/smz8023/rust-math

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

相关文章:

  • Android笔记--MediaCodec(一)
  • Linux简单介绍
  • Servlet 的基本理解
  • JavaScript之applye、bind和call方法详解
  • Docker,anaconda环境的部署与迁移
  • 【大数据运维】Hbase shell 常见操作
  • LeetCode-217存在重复的元素
  • 基于两个单片机串行通信的电子密码锁设计
  • 产品经理功法修炼(3)之产品设计
  • Qt 的发展历史、现状与启示
  • Quiet-STaR:让语言模型在“说话”前思考
  • 【Kotlin】匿名类和伴生类
  • 【机器学习算法介绍】(3)决策树
  • 算法之查找
  • LInux脚本学习
  • JavaWeb基础(计网 socket 数据库 JDBC lombok Mybatis JUnit Maven)
  • 【HBase】
  • Vue3:使用Pinia存储、读取、修改数据
  • 基于 Quartz.NET 可视化任务调度平台 QuartzUI
  • 前端三剑客 —— CSS (第三节)
  • C# 系统学习(异步编程)
  • 前端工程师————CSS学习
  • C# 登录界面代码
  • 点云的Python均值采样
  • xss-labs 11-13通关记录
  • Unity类银河恶魔城学习记录12-2 p124 Character Stats UI源代码
  • 技术揭秘:如何打造完美互动的充电桩硬件与服务平台?
  • 【Django学习笔记(四)】JavaScript 语言介绍
  • IO和NIO的主要区别在哪里?
  • 爬虫部署平台crawlab使用说明