1

JAVA分享篇(15)基础知识大总结

 1 year ago
source link: https://www.laiketui.com/100943.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

JAVA分享篇(15)基础知识大总结

行业动态 2022年12月16日 16:28 16

0.1+0.2!=0.3,这是真的?不信,自己去试试,这是为什么呢?

JavaScript的number类型按照ECMA的JavaScript标准,它的Number类型就是IEEE 754的双精度数值,相当于java的double类型。IEEE 754标准《二进制浮点数算法》(www.ieee.org)就是一个对实数进行计算机编码的标准。因此精度问题不止JS这门语言独有。

按IEEE 754格式保存的浮点数精度相当于带有15、16或17位小数位数的十进制小数,由于存在二进制和十进制的转换问题,具体的位数会发生变化。要获得最高的转换精度,必须指定17位的小数——此时可以相信前15位的精度。

在JavaScript中输出下面这些数值(注意不能作为字符串输出):

0.1000000000000000000000000001

(28位小数)

0.100000000000000000000000001

(27位小数)

0.1000000000000000000000000456

(28位小数)

0.09999999999999999999999

(23位小数)

显示出来的结果都是数值0.1。又如,如果输出1/3的有理数表达式,结果是0.3333333333333333。

因此JavaScript小数在做四则运算时,精度会丢失。那如何解决这个问题呢?我们用JS的原型来解决下。

代码如下:
<!DOCTYPE html>

<html>

<head>

<meta charset=”UTF-8″>

<title></title>

</head>

<body>

<script type=”text/javascript”>

/*(通过原型解决JS中浮点相加不准确的问题? 0.1+0.2===0.3 ??
Var num=Number(0.1);num.add(0.2)的结果是0.3*/

Number.prototype.add=function (num) {

//1.判断this 和 传进来的num哪个小数位多

var num1Length=~~(this.valueOf())===this.valueOf()?0: this.valueOf().toString().split(“.”)[1].length;

var num2Length=~~num===num?0:num.toString().split(“.”)[1].length;

var p=Math.max(num1Length,num2Length);

//return num2Length;

return (this.valueOf()*Math.pow(10,p)+num*Math.pow(10,p))/Math.pow(10,p);

var a=1;

console.log(a.add(0.2));

</script>

</body>

</html>

免责声明:部分文章信息来源于网络以及客户意见反馈,本站只负责对文章进行整理、排版、编辑,出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性,如本站文章和转稿涉及版权等问题,请作者在及时联系本站,我们会尽快联系您处理


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK