Javascript你不知道的那些事!(数字计算篇-变态篇)

javascript:alert(0.1 + 0.2)  

如果看到这样一道题你会怎么思考了!大家肯定第一反应0.3,但是考虑到我已经这样问了!那么幼稚的答案我会专门写篇文章吗

然后人就开始折磨自己了会不会是 0.10.2呢

然后结果还是很拉风的

0.30000000000000004

再来0.1+0.7

0.7999999999999999

这是由于十进制到二进制的转换导致的精度问题!因为计算机执行的是二进制算术,当一个十进制数不能准确的转化着二进制数时,这种精度误差就无法避免。如果对这简单的原因描述还是迷惑的话,那就接着看文章后面的具体描述吧!

然后 有趣的再来个有趣的事情

parseInt(0.0000008)

这个结果是多少呢,你说是0,我说是8,你又说那是8

parseInt(0.08)

那么这个你又说是8,但我又说是0。。。我估计你有凌乱了

我纵里寻她千百度。。。。然后找到的结果

很多语言在浮点和整形之间的运算`都有精度问题
只不过可能js的略风骚一些

认识javascript的浮点运算

 学过js的同学都知道,js中的数字都是用浮点数表示的,并规定使用IEEE 754 标准的双精度浮点数表示。

 IEEE 754 标准的浮点数简介(呵呵,这可是大学里学习的组成原因知识噢)

 IEEE 754 规定了两种基本浮点格式:单精度和双精度。

 IEEE单精度格式具有24 位有效数字精度(包含符号号),并总共占用32 位。

 IEEE双精度格式具有53 位有效数字精度(包含符号号),并总共占用64 位。

说明: 基本浮点格式是固定格式,相对应的十进制有效数字分别为7位和17位。基本浮点格式对应的C/C++类型为float和double。

时间: 2024-11-29 05:15:46

Javascript你不知道的那些事!(数字计算篇-变态篇)的相关文章

JavaScript 你不知道的事 -- 关于函数

接上篇Javascript 你不知道的事,直接条列了: 每个函数创建时默认带有一个prototype属性,其中包含一个constructor属性,和一个指向Object对象的隐藏属性__proto__.constructor属性的值为该函数的对象.在一个函数前面加上new来调用,则会创建一个隐藏连接到该函数prototype成员的新对象(由__proto__属性来链接),同时函数的this将会被绑定到那个新对象上. 函数总是返回一个值:如果没有指定返回值,就返回undefined:如果当做构造函

javascript避免数字计算精度误差的方法详解

本篇文章主要是对javascript避免数字计算精度误差的方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 如果我问你 0.1 + 0.2 等于几?你可能会送我一个白眼,0.1 + 0.2 = 0.3 啊,那还用问吗?连幼儿园的小朋友都会回答这么小儿科的问题了.但是你知道吗,同样的问题放在编程语言中,或许就不是想象中那么简单的事儿了.不信?我们先来看一段 JS. var numA = 0.1; var numB = 0.2; alert( (numA + numB) === 0.3

几个有用的javascript(日期比较,数字验证,数字和汉字长度计算)

1:日期大Js代码 Js代码   //人员失效职位日期是否小于组织失效日期 function perDateInvalidate(){ var flag = true; //组织失效日期 var orgDate = stringToTime(document.getElementById("orgDate").value); //人员失效日期 var personDate = stringToTime(document.getElementById("personDate&q

JS数字计算精度误差的解决方法

本篇文章主要是对javascript避免数字计算精度误差的方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助. 如果我问你 0.1 + 0.2 等于几?你可能会送我一个白眼,0.1 + 0.2 = 0.3 啊,那还用问吗?连幼儿园的小朋友都会回答这么小儿科的问题了.但是你知道吗,同样的问题放在编程语言中,或许就不是想象中那么简单的事儿了. 不信?我们可以做个试验. 先来看一段 JS. var num1 = 0.1; var num2 = 0.2; alert(num1+num2 ===

JavaScript那点事

1. JavaScript是基于原形的面向对象的语言 2. JavaScript是一种弱类型语言 3. JavaScript区分大小写 4. 表示字符串的引号单双都可以 5. 标识符:字母.数字.下划线.美元符号,以非数字开头 6. 数据类型: 数字number 字符串string 布尔boolean:值是true.false,不能改变大小写 对象object 函数function undefined:声明但未赋值 null:表示一个空对象指针 7. 控制结构 if(){}else if{}el

javascript中字符串向数字类型的自动转换

js中类型的转换依环境而定,当字符串向数字类型(浮点)转换时,有几种情况: 1.加号连接符引导为字符拼接: console.log("2"+1); 21 console.log(1+"2"+1); 121 2.其余情况引导为数字计算: console.log(0-"2"+1); -1 console.log("2"*2); 4 console.log(1*"2"+1); 3 3.当字符串带非数字时返回NaN

开源 VS 商业,消息中间件你不知道的那些事

11月23日,新炬网络中间件技术专家刘拓老师在DBA+社群中间件用户组进行了一次主题为“开源 VS 商业,消息中间件你不知道的那些事”的线上分享.小编特别整理出其中精华内容,供大家学习交流. 嘉宾简介 新炬网络中间件技术专家 曾任职于IBM华南GTS 4年,IBM WebSphere.MQ.CICS产品线技术专家 5年移动运营商(广东移动.浙江移动)运维经验,3年JAVA开发及售后经验 演讲实录 随着云计算的兴起,Docker.微服务的流行,分布式消息队列技术成为云计算平台中不可或缺的组件.今天

Linux Shell 数字计算

直接上脚本, 使用$(())以及$[]进行数字计算 数值比较:n1 -eq n2检查n1是否等于n2         n1 -le n2检查n1是否小于等于n2n1 -ge n2检查n1是否大于等于n2     n1 -lt n2检查n1是否小于n2n1 -gt n2检查n1是否大于n2         n1 -ne n2检查n1是否不等于n2 #!/bin/bash numa=1; numb=2; numc1=$(($numa - $numb)); numc2=$[$numa + $numb]

JS数字计算精度问题解决

1 add(a, b) {//相加 2 var c, d, e; 3 try { 4 c = a.toString().split(".")[1].length; 5 } catch (f) { 6 c = 0; 7 } 8 try { 9 d = b.toString().split(".")[1].length; 10 } catch (f) { 11 d = 0; 12 } 13 return e = Math.pow(10, Math.max(c, d)),