long到number转换 ts_js如何将纯数字字符串转换为long型

本文介绍了JavaScript中处理大整数精度丢失和浮点数运算不准确的问题。通过将数字转换为特定格式,利用自定义的加、减、乘、除方法来确保运算精度。此外,还提到了字符串转数字类型的操作,并分享了在实际项目中可能遇到的精度挑战及其解决方案。
摘要由CSDN通过智能技术生成

1.js如何将纯数字字符串转换为long型?

js 中 int的存储位数?最大十进制数表示是多少?

整数(不使用小数点或指数计数法)最多为 15 位。

小数的最大位数是 17,但是浮点运算并不总是 100% 准确

对于整数,前端出现问题的几率可能比较低,毕竟很少有业务需要需要用到超大整数,只要运算结果不超过 Math.pow(2, 53) 就不会丢失精度。

对于小数,前端出现问题的几率还是很多的,尤其在一些电商网站涉及到金额等数据。解决方式:把小数放到位整数(乘倍数),再缩小回原来倍数(除倍数)

大整数的精度丢失和浮点数本质上是一样的,尾数位最大是 52 位,因此 JS 中能精准表示的最大整数是 Math.pow(2, 53),十进制即 9007199254740992。

//------------------------------解决办法 ---------------------------------------------//

JavaScript小数在做四则运算时,精度会丢失,这会在项目中引起诸多不便,先请看下面脚本:

alert(1/3);//弹出: 0.3333333333333333

alert(0.09999999 + 0.00000001);//弹出: 0.09999999999999999

alert(-0.09999999 - 0.00000001);//弹出: -0.09999999999999999

alert(0.012345 * 0.000001);//弹出: 1.2344999999999999e-8

alert(0.000001 / 0.0001);//弹出: 0.009999999999999998

按正常计算的话,除第一行外(因为其本身就不能除尽),其他都应该要得到精确的结果,从弹出的结果我们却发现不是我们想要的正确结果。为了解决浮点

数运算不准确的问题,在运算前我们把参加运算的数先升级(10的X的次方)到整数,等运算完后再降级(0.1的X的次方)。现收集并整理贴于此,以备后

用。

//加法

Number.prototype.add = function(arg){

var r1,r2,m;

try{r1=this.toString().split(".")[1].length}catch(e){r1=0}

try{r2=arg.toString().split(".")[1].length}catch(e){r2=0}

m=Math.pow(10,Math.max(r1,r2))

return (this*m+arg*m)/m

}

//减法

Number.prototype.sub = function (arg){

return this.add(-arg);

}

//乘法

Number.prototype.mul = function (arg)

{

var m=0,s1=this.toString(),s2=arg.toString();

try{m+=s1.split(".")[1].length}catch(e){}

try{m+=s2.split(".")[1].length}catch(e){}

return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)

}

//除法

Number.prototype.div = function (arg){

var t1=0,t2=0,r1,r2;

try{t1=this.toString().split(".")[1].length}catch(e){}

try{t2=arg.toString().split(".")[1].length}catch(e){}

with(Math){

r1=Number(this.toString().replace(".",""))

r2=Number(arg.toString().replace(".",""))

return (r1/r2)*pow(10,t2-t1);

}

}

alert(Number(0.09999999).add(0.00000001));//弹出: 0.1

//注意,如果是负数,一定要先使用Number转型,否则结果不正确

alert(Number(-0.09999999).sub(0.00000001));//弹出: -0.1

alert(Number(0.012345).mul(0.000001));//弹出: 1.2345e-8

alert(Number(0.000001).div(0.0001));//弹出: 0.01

给定的逗号分隔的数字字符串转换为Table

--将给定的逗号分隔的数字字符串转换为Table CREATE FUNCTION [dbo].[fu_Split](@strString nvarchar(4000)) RETURNS @Result ...

007——转载——C#将字符串转换为整型的三种方法的总结

(一)转载——C#将字符串转换为整型的三种方法的总结 在C#中,要将一个字符串或浮点数转换为整数,基本上有三种方法: (1)使用强制类型转换:(int)浮点数 (2)使用Convert.ToInt32 ...

Java带有运算符的字符串转换为Long型

由于项目需要在配置文件中配置一个刷新时间,但是配置文件中取出来来的数据肯定是字符串,然后要将该带有运算符的字符串转换为Long型.具体代码如下: 配置文件system.properties中: ref ...

剑指offer-第七章面试案例1(字符串转换为整型)

//将字符串转换为整型 //思路:特殊的输入测试: //1,考虑字符串是否为空.2.字符串问空的时候的返回0,和真实的返回0直键的区别.3,字符串中出现0~9的字符处理 //4.字符串中出现*,¥等一 ...

【转载】 C#中使用int.TryParse方法将字符串转换为整型Int类型

在C#编程过程中,将字符串string转换为整型int过程中,时常使用的转换方法为int.Parse方法,但int.Parse在无法转换的时候,会抛出程序异常,其实还有个int.TryParse方法可 ...

【转载】C#中使用int.Parse方法将字符串转换为整型Int类型

在C#编程过程中,很多时候涉及到数据类型的转换,例如将字符串类型的变量转换为Int类型就是一个常见的类型转换操作,int.Parse方法是C#中专门用来将字符串转换为整型int的,int.Parse方 ...

JS里访问纯数字ID对象时出现问题

Hello

例如上面的例子,id为纯数字会出错.此时用js去获取该对象会报错,查找不到该对象. 原因:必须是字母开头,或是下划线 ...

double类型字符串转换成一个纯数字字符串和一个小数点位数的c++代码

今天工作中遇到一个要不一个double型的字符串转换成一个纯字数字符串和一个标志这个数字字符串的小数点有几位的int类型 例如:“23.123”--->“23123” + 3   比较简单.就是 ...

js中字符串转换为日期型

简介:字符串转日期型函数 传入一个字符串格式的日期,如何转换为日期型的.以下为转换方案. //字符串转换为日期函数,返回日期型(传入的日期格式2014-04-22) function StringTo ...

随机推荐

ANDROID_MARS学习笔记_S02_007_Animation第一种使用方式:代码

一.简介 二.代码1.xml(1)activity_main.xml <?xml version="1.0" encoding="utf-8"?> ...

Java语言基础(四) String和StringBuffer的区别

Java提供了两个字符串类:String和StringBuffer. String提供了数值不可变的字符串,而StringBuffer提供的字符串对象可以进行修改. 当知道字符数据要改变的时候就可以使 ...

ab压测 apr&lowbar;socket&lowbar;recv&colon; Connection reset by peer &lpar;104&rpar;错误解决方法

用apache自带ab命令进行压测,报了如下错误: 原因是在ab的程序源码中对并发数有限制. 解决办法:修改apache源码support下面的ab.c源代码,然后重新编译.修改内容如下:

es3中使用es6&sol;7的字符串扩展

最近在看阮一峰的,在字符串扩展一节中有提到几个新的扩展,觉得挺有意思,想在ES3里面使用,于是就有下面的兼容性写法. repeat 将一个字符串重复n次 String.p ...

memo用法总结

添加 mmo1.Lines.add('新加的一行');//追加一行文字 mmo1.Lines.Insert(1,'新插入一行');//在指定位置插入一行 删除 mmo1.Lines.Delete(1) ...

DWR整合之JSF

DWR 与 JSF DWR 包括两个 JSF 的扩展点,一个创造器和一个 ServletFilter. 1.JSF Creator DWR1.1 中有一个体验版的 JsfCreator.你可以在 dw ...

使用python制作ArcGIS插件(4)界面交互

使用python制作ArcGIS插件(4)界面交互 by 李远祥 插件界面部分,除了一开始在设计器中设计的这些界面元素之外,还可以与操作系统进行一些输入输出的交互,这部分的实现全部在pythonadd ...

Taints 与 Tolerations

节点亲和性是描述Pods如何分配到一个或一组节点的策略,亲和性的相关资料可以参考Kubernetes中的亲和性与反亲和性.与亲和性规则不同, Taints 描述节点拒绝一个或一组Pods的策略.其实现 ...

Linux内核第八节 20135332武西垚

第一种分类: I/O-bound:频繁进行I/O,并且需要花费很多时间等待I/O完成 CPU-bound:计算密集,需要大量的CPU时间进行运算 第二种分类: 批处理进程:不必与用户交互,常在后台进行 ...

Java JPA小记

什么是JPA JPA之于ORM(持久层框架,如MyBatis.Hibernate等)正如JDBC之于数据库驱动. JDBC是Java语言定义的一套标准,规范了客户端程序访问关系数据库(如MySQL.O ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值