js中二進位制浮點數和四捨五入錯誤
js採用IEEE-754浮點數表示法(幾乎所有現代程式語言採用),這是一種二進位制表示法,可以精確的表示分數如 1/2、1/4、1/8和1/1024。但遺憾的是我們經常用的分數(特別是金融方面)都是十進位制分數1/10、1/100等。二進位制浮點數表示法並不能精確表示累0.1這簡單的數字。
js中的數字具有足夠的精度,並可以即期近似於0.1。但數字不能精確表述的確帶來一些問題。如
var x = 0.3-0.2
var y = 0.2-0.1
x == y //false兩值不相等
由於舍入誤差。0.3-0.2的近似差值使勁上並不等於02.-0.1的近視差。但x和y的值非常接近彼此和最終的正確值。
注意:這種情況並不是js中才會出現,在任何採用二進位制浮點數的程式語言中都會出現這個問題。
相關推薦
js中二進位制浮點數和四捨五入錯誤
js採用IEEE-754浮點數表示法(幾乎所有現代程式語言採用),這是一種二進位制表示法,可以精確的表示分數如 1/2、1/4、1/8和1/1024。但遺憾的是我們經常用的分數(特別是金融方面)都是十進位制分數1/10、1/100等。二進位制浮點數表示法並不能精確表示累0.1這簡單的數字。
js 中關於浮點數的計算
專案中遇到浮點數的計算,開始想當然的當做int型別去做計算,計算過後才發現並不是如此,於是在網上找到了一個很好的方法 //加法函式 function accAdd(arg1, arg2) { var r1, r2, m; &nb
談談JavaScript的算數運算、二進位制浮點數舍入誤差及比較、型別轉換和變數宣告提前問題
在《JavaScript權威指南》一書第三章節“型別、值和變數”中,作者詳細介紹了Javascript的數字、文字、布林值等型別,全域性物件,包裝物件,型別轉換,變數作用域等概念。其中有3個地方需要我們在使用過程中引起注意,可能稍不留神就犯錯: 1)算數運算與浮點數比較問題 2)
shell比較浮點數和整數
ssi 工作 示例 一個 style 朋友 shell code nbsp 今天有一個朋友忽然問我在shell中,如何比較浮點數和整數,倒是把我問的一楞,在工作中確實沒有遇到這個場景。我們也知道,在shell中數字的計算通常都會轉換成整數,比如說1.1和1會被認為是一樣
JS中const、var和let區別
方法 pre 命令 con 使用 它的 comm 作用 影響 在JavaScript中有三種聲明變量的方式:var、let、const。 1.const 聲明創建一個只讀的常量。這不意味著常量指向的值不可變,而是變量標識符的值只能賦值一次,必須初始化。 const b
js中的深拷貝和淺拷貝
所有 object 簡單的 col images new color 其他 java 深復制和淺復制只針對像 Object, Array 這樣的復雜對象的。簡單來說,淺復制只復制一層對象的屬性,而深復制則遞歸復制了所有層級。 深淺拷貝 的主要區別就是:復制的是引用(地址)還
JS中值類型和引用類型
另一個 bsp 引用類型 nbsp 對象 logs 包括 方式 console 一.值類型 例子: 1 var a=10; 2 var b=a; 3 a=20; 4 console.log(b); //10 例子中,將a的值賦給了b,b=10,然後改變a的值不會
關於JS中獲取瀏覽器高度和寬度值的多種方法(多瀏覽器)
正文 取數 16px javascrip 函數 script meta get ansi 三種瀏覽器獲取值方法 IE中: document.body.clientWidth ==> BODY對象寬度 document.body.clientHeight ==>
JS中的變量和輸入輸出
點擊 初始 能夠 rom 駝峰 規範 小寫字母 截取 分離 一、使用JS的三種方式 1、在HTML標簽中,直接內嵌JS(並不提倡使用) <button onclick="alert(‘點你咋地‘)">點我</button> >>
JS中的運算符和JS中的分支結構
-1 amp 算術 res 同時 其余 字符 3層 fine JS中的運算符 1、算術運算(單目運算符) + 、-、*、 /、 %取余、++自增 、--自減 +:兩種作用,鏈接字符串/加法運算。當+兩邊全為數字時,進行加法運算;當+兩邊有任意一
JS中的DOM操作和事件
row ffffff and rop seo pre 事件觸發 定位 code 【DOM樹節點】 DOM節點分為三大類: 元素節點、 屬性節點、 文本節點; 文本節點、屬性節點屬於元素節點的子節點。操作時,均需要先取到元素節點,再操作子節點;可以使用getElement系
JS中的單引號和雙引號
ont 進行 成對 在外 可讀性 編譯 afa 來看 遇到 JS裏面的單引號和雙引號可以同時使用,但是要遵循一定的準則。 最外面用了雙引號了,那麽裏面就不能再用雙引號了,因為引號是成雙對的,瀏覽器讀到一個雙引號後,到第2個雙引號時才算結束;同理,瀏覽器讀到一個單引號後,必須
js中字符串和json數組的相互轉換
pre json 就會 div scrip string json數組 互轉 obj //示例 var a={"name":"tom","sex":"男","age":"24"}; //向數據庫存儲時傳參數a時,直接這樣傳會存為object //json數組轉化為字
js中的真值和假值
nan clas efi fin define hello borde table log 大多數編程語言中,布爾值true和false僅僅表示true/false。JavaScript中,如‘Hello‘這樣的字符串值,也可以看做true. 以下是不同數據類型
js中toLocalString()、toString()和valueOf()方法
布爾 locals body 值類型 屬於 計算 函數 pos 使用 所有的對象都具有toLocaleString()、toString()和valueOf()方法,toString() 1、Array.toString():將數組轉換成一個字符串,並且返回這個字符串。描述
shell腳本中的浮點數計算
[ ] 編程語言 浮點 ons entos tex tails 設置 ont bash數字計算——數字處理能力對任何一種編程語言都至關重要,可是對於bash shell腳本來說,這種能力很差,即使expr命令和$[ ]的形式也只能進行整數運算,無法完成對浮點數的運算。為了突
php學習筆記-php中把浮點數轉化為整數
floor 它的 gpo 操作 post bsp 有時 原因 結果 在php中有時候會遇到比如 14.6%3這種操作,php是會先把14.6轉化為整數再做其它的操作,那麽這個轉化為整數的操作是floor(14.6)還是ceil(14.6)還是round(14.6)呢?都不是
JS節點操作 (表格在js中添加行和單元格,並有一個刪除鍵)
sed doc nod lis 姓名 ins func play 移除 1 <div id="div"> 2 <table id="tab"> 3 <tr> 4 <th&g
js中有window.onload和<BODY>中的onload屬性同時存在時
onload情況一,window.onload指定的function是匿名的,則只執行後者,且動作是後者的動作。如: [html] view plain copy<html> <head> <script type="text/javascript">