无限小数

JS浮点数的研究

泪湿孤枕 提交于 2020-01-30 19:32:27
为什么0.1 + 0.2 得到的是 0.30000000000000004 console.log( 0.1 + 0.2 == 0.3);//false 在js中所有的整数和小数都是以Number形式储存在字节bit中,而javaScipt中Number采用的是64位的双精度浮点型. 而0.1和0.2转为二进制时: //0.1转为二进制0.1 =0.0 0011 0011 0011 0011...(0011无限循环)//0.2转为二进制0.0011 0011 0011 0011 0011...(0011无限循环)//转为二进制时,0.1和0.2的数字实际上是无限循环的. 在加法计算时,Number实际上是以零后52位进行运算,有误差值. var d = 0.1 + 0.2;console.log(d.toString(2)); console.log(d);//0.0100110011001100110011001100110011001100110011001101(默认54位)//0.30000000000000004   解决方法 以 toFixed方法来固定保留小数位,固定保留小数位。 来源: https://www.cnblogs.com/zenggaozheng/p/12243463.html

验证整数或小数的正则表达式

家住魔仙堡 提交于 2019-12-11 19:41:14
验证非0开头的无限位整数和小数。整数支持无限位,小数点前支持无限位,小数点后最多保留两位。 js代码如下:  var reg = /^(([^0][0-9]+|0)\.([0-9]{1,2})$)|^([^0][0-9]+|0)$/; 单独拆分:   1. 整数: /^([^0][0-9]+|0)$/   2. 小数: /^(([^0][0-9]+|0)\.([0-9]{1,2}))$/ 根据需求可更改:   1. 若更改小数点前限制位数,则更改 + (例如:小数点前限制4位——( [^0][0-9]\d{0,3}|0) ),整数同理。   2. 若更改小数点后限制位数,则更改 {1,2} ( 例如::小数点后最多保留3位—— {1, 3} ;小数点后必须保留3位—— {3} )。 来源: https://www.cnblogs.com/wbyixx/p/12024426.html

无限循环小数化分数

◇◆丶佛笑我妖孽 提交于 2019-11-29 00:52:02
结论 先举个例子:设小数x=0. 316459 6657 66576657...下划线部分为小数后不循环部分,记a=316459,位数m=6,加深部分为小数后循环部分,记b=6657,位数n=4.则分数为 (a*10 n +b-a)/10 m (10 n -1) ,最后约分即可. 原理 把先小数用 分数表示 .x=a/10 m +b/10 m+n +b/10 m+2n +b/10 m+3n .....化简一下x=1/10 m (a+b(1/10 n +1/10 2n +1/10 3n +....)),后面的 等比数列用求和公式 代替,x=1/10 m (a+b/(10 n -1)),最后通分一下就可以得到x=(a(10 n -1)+b)/10 m (10 n -1),也就是 x=(a*10 n +b-a)/10 m (10 n -1) . 来源: https://www.cnblogs.com/VBEL/p/11437393.html