当前位置: 首页 > 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

相关文章:

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

1.解决前端大额计算导致精度丢失问题 2.从底层上解决这个问题&#xff0c;计算时不使用js 运行时计算。 使用rust语言来解决这个问题&#xff0c;因为是底层语言&#xff0c;不涉及到精度问题。 3.实现步骤 步骤 1: 安装工具 确保你已经安装了Rust工具链和wasm-pack&#x…...

Android笔记--MediaCodec(一)

这一节主要来了解一下MediaCodec&#xff0c;Android MediaCodec 是 Android 平台提供的一个用于处理音频和视频数据的 API。它允许开发者对音频和视频数据进行编码和解码&#xff0c;支持多种格式和编解码器。MediaCodec API 通常用于实现实时音视频处理&#xff0c;如视频录制…...

Linux简单介绍

Linux简单介绍 编译器VMware虚拟机Ubuntu——LinuxOS为什么使用LinuxOS&#xff1f; 目录结构Windows目录结构Linux操作系统home是不是家目录&#xff1f; Linux常用命令终端命令行提示符与权限切换命令tab 作用&#xff1a;自动补全上下箭头pwd命令ls命令mkdir命令touch命令rm…...

Servlet 的基本理解

Servlet 是JavaEE规范的一种&#xff0c;主要是为了扩展Java作为Web服务的功能&#xff0c;统一接口。由其他内部厂商如tomcat&#xff0c;jetty内部实现web的功能。如一个http请求到来&#xff1a;容器将请求封装为servlet中的HttpServletRequest对象&#xff0c;调用init()&a…...

JavaScript之applye、bind和call方法详解

Question Q1 apply()、bind()和call()方法的区别在哪&#xff1f; Q2 apply()和call()的应用场景 Q3 apply()、bind()和call()方法手写实现逻辑 来源 继承自Function.prototype&#xff0c;属于实例方法 console.log(Function.prototype.hasOwnProperty(call)) //trueconsole.l…...

Docker,anaconda环境的部署与迁移

功能上线将提上日程&#xff0c;但是如何将我windows环境下的程序放到linux服务器的测试环境跑通呢&#xff1f;这是我这整个清明假期将要解决的一件事&#xff0c;最蠢的办法就是看自己的环境下有哪些依赖&#xff0c;如何到服务器上一个一个下&#xff0c;但是首先这个方法很…...

【大数据运维】Hbase shell 常见操作

文章目录 一. DDL1. 表的DDL1.1. 创建表1.2. 删除表 2. 列族的DDL2.1. 增加一个列簇2.2. 删除列族2.3. 修改列族版本&#xff08;ing&#xff09; 二. DML1. 插入与更新数据2. 删除数据3. 清空表 三. DQL1. scan&#xff1a;查一批数据1.1. 查询全部1.2. 过滤rowkey1.3. 过滤列…...

LeetCode-217存在重复的元素

217 存在重复的元素 给定一个整数数组&#xff0c;判断是否存在重复元素。 如果存在一值在数组中出现至少两次&#xff0c;函数返回 true 。如果数组中每个元素都不相同&#xff0c;则返回 false 。 JavaScript的 Array 对象是用于构造数组的全局对象&#xff0c;数组是类似…...

基于两个单片机串行通信的电子密码锁设计

1.功能 电子号码锁在实际应用中应该有两部分&#xff0c;一部分在外部&#xff0c;有键盘部分和密码显示&#xff1b;另一部分内部&#xff0c;设置密码、显示密码。使用单片机自身带有的串口可以很方便的实现单片机之间的通信&#xff0c;使输入的密码值传送到主机检验是否是…...

产品经理功法修炼(3)之产品设计

点击下载《产品经理功法修炼(3)之产品设计》 1. 前言 产品经理的能力修炼并非局限于某一技能的速成,而是需要全面参与到产品的整个生命周期中,通过不断的实践来逐步提升自己的各项能力。尽管在企业的日常运作中,我们不可能身兼数职去扮演每一个角色,但作为产品的核心负…...

Qt 的发展历史、现状与启示

Qt 最早在1991年由挪威的两位程序员 Eirik Chambe-Eng 和 Haavard Nord 开发&#xff0c;他们在1994年创立 Trolltech 公司&#xff08;奇趣科技&#xff09;正式经营软件业务。Qt 的第一个公众预览版于1995年面世&#xff0c;之后在2008年被诺基亚收购&#xff1b;2011年到201…...

Quiet-STaR:让语言模型在“说话”前思考

大型语言模型(llm)已经变得越来越复杂&#xff0c;能够根据各种提示和问题生成人类质量的文本。但是他们的推理能力让仍然是个问题&#xff0c;与人类不同LLM经常在推理中涉及的隐含步骤中挣扎&#xff0c;这回导致输出可能在事实上不正确或缺乏逻辑。 考虑以下场景:正在阅读一…...

【Kotlin】匿名类和伴生类

1 匿名类 1&#xff09;无继承 fun main() {var obj object {var name: String "zhang"override fun toString(): String {return name}}println(obj) // zhang } 2&#xff09;有继承 fun main() {var obj object: People {var name: String "zhang"…...

【机器学习算法介绍】(3)决策树

决策树是一种常见的机器学习算法&#xff0c;用于分类和回归任务。它模拟了人类决策过程&#xff0c;通过一系列的问题来引导决策。决策树的构建涉及三个主要步骤&#xff1a;特征选择、树的构建和树的剪枝。 1. 特征选择 特征选择是决策树构建过程中的第一步&#xff0c;目的…...

算法之查找

1、顺序查找&#xff1a; package com.arithmetic.search; //顺序查找 //sequentialSearch 方法接收一个整数数组和一个目标元素作为参数&#xff0c;并使用顺序查找的方式在数组中查找目标元素。 //它通过循环遍历数组元素&#xff0c;逐个与目标元素比较&#xff0c;如果找到…...

LInux脚本学习

1.注释 #单行注释 以 # 字符开头就是单行注释 当然第一行除外&#xff0c;比较特殊 2.多行注释 3.Shell文件的作用 Shell文件就是linux命令集 4.sh脚本的执行方式 bash xxx.sh 5.新建的文件会没有执行权限 #为文件赋予执行权限 chmod ux xxx.sh 6.编写规范 #!/bin/bash #…...

JavaWeb基础(计网 socket 数据库 JDBC lombok Mybatis JUnit Maven)

本文用于检验学习效果&#xff0c;忘记知识就去文末的链接复习 1. 网络基础 1.1 计网基础 区分设备&#xff1a;IP地址 区分网络&#xff1a;网络地址 网络互联&#xff1a;路由器 主机上进程间通信&#xff1a;端口 http是常用的协议&#xff0c;基于TCP协议 TCP VS U…...

【HBase】

什么是HBase HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据。 访问层次&#xff08;数据…...

Vue3:使用Pinia存储、读取、修改数据

一、存储数据 Pinia插件中&#xff0c;存储数据的配置项是state count.ts import {defineStore} from piniaexport const useCountStore defineStore(count,{// 真正存储数据的地方state(){return {sum:6}} })loveTalk.ts import {defineStore} from piniaexport const use…...

基于 Quartz.NET 可视化任务调度平台 QuartzUI

一、简介 QuartzUI 是基于 Quartz.NET3.0 的定时任务 Web 可视化管理&#xff0c;Docker 打包开箱即用、内置 SQLite 持久化、语言无关、业务代码零污染、支持 RESTful 风格接口、傻瓜式配置、异常请求邮件通知等。 二、部署 QuartzUI 从 2022 年到现在没有提交记录&#xf…...

Stryker.NET在CI/CD中的应用:如何在DevOps流水线中集成变异测试

Stryker.NET在CI/CD中的应用&#xff1a;如何在DevOps流水线中集成变异测试 【免费下载链接】stryker-net Mutation testing for .NET core and .NET framework! 项目地址: https://gitcode.com/gh_mirrors/st/stryker-net Stryker.NET是一款强大的.NET变异测试工具&…...

CANN/asc-devkit Reset函数说明

Reset 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言&#xff0c;原生支持C和C标准规范&#xff0c;主要由类库和语言扩展层构成&#xff0c;提供多层级API&#xff0c;满足多维场景算子开发诉求。 项目地址: https://gitcode.com/cann…...

渗透测试技巧(七)| 系统提权

系统提权基础 实战过程中,你通过漏洞(上传漏洞、弱口令、Web 漏洞)打进服务器,一般只能对应应用服务的账户权限。这个权限常常属于低权限账户,无法查看账号密码、配置系统文件、获取敏感数据等,这时就需要提权!提权就是把低权限账号升级为系统最高权限,从而完全控制服…...

SVG 滤镜:全面解析与高效应用

SVG 滤镜&#xff1a;全面解析与高效应用 引言 SVG&#xff08;可缩放矢量图形&#xff09;作为一种广泛使用的图形格式&#xff0c;因其具有高度的可缩放性和跨平台性而备受青睐。SVG 滤镜作为 SVG 的一项强大功能&#xff0c;能够实现丰富的图形效果&#xff0c;提升图形的表…...

从mekong-cli看现代CLI工具的设计哲学与工程实践

1. 项目概述&#xff1a;一个命令行工具能做什么&#xff1f;在开发者的日常工作中&#xff0c;命令行界面&#xff08;CLI&#xff09;是我们与计算机系统交互最直接、最高效的桥梁。无论是自动化部署、批量处理文件&#xff0c;还是与远程API进行交互&#xff0c;一个设计精良…...

构建LLM智能体可学习记忆系统:Membrane架构与实战指南

1. 项目概述&#xff1a;为LLM智能体构建一个可学习、可修正的记忆系统如果你正在构建一个长期运行的LLM智能体&#xff0c;或者一个需要“记住”过去经验并从中学习的AI系统&#xff0c;那么“记忆”问题很可能已经让你头疼不已。传统的做法&#xff0c;要么是把所有对话历史一…...

GEE筛选行政区的两种野路子:手绘个圈圈或者随便点个点,就能搞定研究区边界

GEE自定义研究区边界&#xff1a;交互式绘图与动态筛选实战指南 当研究区域无法用标准行政区划描述时&#xff0c;传统GIS工作流程往往陷入数据准备的泥潭。本文介绍两种Google Earth Engine&#xff08;GEE&#xff09;中高效定义不规则边界的创新方法&#xff0c;特别适合生态…...

企业/学校如何自建在线“慕课“教学平台?Moodle 开源 LMS 初识与部署全攻略

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] 0x00 前言简述 背景说明 出于内部学习平台搭建需要&#xff0c;领导吩咐我去探究部署一些开源学习平台&#xff0c;要求支持Office协同文档、学习课程发布、学习记录反馈和支持 OAuth2 客户端以对…...

SAP顾问实战笔记:手把手配置OBYC,搞定采购收货到发票校验的自动记账

SAP财务自动化实战&#xff1a;从采购收货到发票校验的OBYC全链路配置指南 当财务部门每月需要处理上千笔采购业务时&#xff0c;手工记账不仅效率低下&#xff0c;还容易出错。SAP系统中的OBYC配置正是解决这一痛点的关键——它能实现从采购收货到发票校验的全自动会计凭证生成…...

基于MCP协议构建AI Agent链上数据查询与操作工具实践

1. 项目概述&#xff1a;一个连接加密世界与AI的“翻译官”如果你最近在捣鼓AI Agent&#xff0c;特别是想让它帮你分析链上数据、查询钱包余额&#xff0c;甚至执行一些基础的区块链操作&#xff0c;那你可能已经发现了一个痛点&#xff1a;让AI直接理解并操作区块链&#xff…...