1. 程式人生 > >js浮點數運算

js浮點數運算

//加法函式,用來得到精確的加法結果
//說明:javascript的加法結果會有誤差,在兩個浮點數相加的時候會比較明顯。這個函式返回較為精確的加法結果。
//呼叫:accAdd(arg1,arg2)
//返回值:arg1加上arg2的精確結果
function accAdd(arg1,arg2){
    var r1,r2,m;
    try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
    try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
    m=Math.pow(10,Math.max(r1,r2))
    return (arg1*m+arg2*m)/m
}

//給Number型別增加一個add方法,呼叫起來更加方便,以下類似
Number.prototype.add = function (arg){
    return accAdd(arg,this);
}

//乘法函式,用來得到精確的乘法結果
//說明:javascript的乘法結果會有誤差,在兩個浮點數相乘的時候會比較明顯。這個函式返回較為精確的乘法結果。
//呼叫:accMul(arg1,arg2)
//返回值:arg1乘以arg2的精確結果
function accMul(arg1,arg2)
{
    var m=0,s1=arg1.toString(),s2=arg2.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)
}

//除法函式,用來得到精確的除法結果
//說明:javascript的除法結果會有誤差,在兩個浮點數相除的時候會比較明顯。這個函式返回較為精確的除法結果。
//呼叫:accDiv(arg1,arg2)
//返回值:arg1除以arg2的精確結果
function accDiv(arg1,arg2){
    var t1=0,t2=0,r1,r2;
    try{t1=arg1.toString().split(".")[1].length}catch(e){}
    try{t2=arg2.toString().split(".")[1].length}catch(e){}
    with(Math){
        r1=Number(arg1.toString().replace(".",""))
        r2=Number(arg2.toString().replace(".",""))
        return (r1/r2)*pow(10,t2-t1);
    }
}

相關推薦

js點數運算

//加法函式,用來得到精確的加法結果 //說明:javascript的加法結果會有誤差,在兩個浮點數相加的時候會比較明顯。這個函式返回較為精確的加法結果。 //呼叫:accAdd(arg1,arg2) //返回值:arg1加上arg2的精確結果 function accA

JS點數運算的處理

四捨五入 方法一: 在JS中四捨五入的函式 toFixed(n) , n為要保留的小數位數。 n為0~20,當n超過20的時候,JS會出錯。 如果小數點前和要擷取的前一位都是0時,不會按常理擷取。 var h=0.07 h.toFixed(1)的值為0.0 其實

js點數運算精度問題

大多數語言在處理浮點數的時候都會遇到精度問題,但是在JS裡似乎特別嚴重,來看一個例子 alert(45.6*13); 結果居然是592.800000000001,當然加法之類的也會有這個問題 那這是js的錯誤嗎? 當然不是,你的電腦做著正確的二進位制

JS點數精度運算

     一般來講,我們在專案中必不可少的需要進行各種數值的計算,但是這種計算全部放在服務端會給伺服器帶來很大的壓力,所以勢必要客戶端來 分擔一些計算的壓力。     從客戶端來說,JavaScript是一門弱型別語言,對浮點數的精度並沒有做很好的限制,所以就會產生浮點數的誤差。     浮點數誤差產生

計算機組成原理筆記之點數運算

http 計算機組成 nbsp 技術 -1 .com alt bsp 筆記 計算機組成原理筆記之浮點數運算

js點數的計算總結

src .cn () log urn fun number lac 分開 在js浮點值的計算中,很多時候會出現不準確的情況,如下面的情況 console.log(2.2 + 2.1) // 4.300000000000001 console.log(2

Verilog 點數運算模塊

pos 技術分享 分享 jpeg ant 綜合 module mage 一個 算法中常常會到浮點數運算,而浮點數的處理常常是Verilog初學中常常遇到的問題。以下將就一個簡單的例子說明Verilog中浮點數運算處理。 在JPEG圖像壓縮時遇到色彩空間變換的問題,將YCbC

js點數算術出現多為小數

lac catch 方法 mod 函數返回 ava 精確 一個 color /****************************************解決JS浮點數(小數)計算加減乘除的BUG Start*******************************

js 點數加、減、乘、除。

[1] 控制 func 乘法 pla ring num max str 1.浮點數加法運算 function numAdd(arg1, arg2) { var r1, r2, m; try { r1 = arg1.t

解決JS點數(小數)計算加減乘除的BUG

java 長度 誤差 spl function urn tofixed ccm catch 加法函數 /** ** 加法函數,用來得到精確的加法結果 ** 說明:javascript的加法結果會有誤差,在兩個浮點數相加的時候會比較明顯。這個函數返回較為精確的加法結果。

NSIS:點數運算

前言 NSIS自帶的工具只能用IntOp進行整型運算,要進行浮點運算只能用FloatOp外掛。 FloatOp外掛的介紹 a.FloatOp外掛下載 b.FloatOp的使用語法如:FloatOp::X $1 $2 $3 說明: 1.X可以取S(加法)或R9(減法)或M(乘

解決JS點數(小數)計算加減乘除的BUG-https://www.cnblogs.com/cynthia-wuqian/p/6432754.html

/****************************************解決JS浮點數(小數)計算加減乘除的BUG    Start****************************************/ /** ** 加法函式,用來得到精確的加法

深入理解計算機系統(2.8)---點數的舍入,Java中的舍入例子以及點數運算(重要)

https://www.cnblogs.com/zuoxiaolong/p/computer12.html 前言     上一章我們簡單介紹了IEEE浮點標準,本次我們主要講解一下浮點運算舍入的問題,以及簡單的介紹浮點數的運算。   之前我們已經提到過,有很多小數是二進位制

點數運算出現誤差的解決方案

    直接上程式碼 public static void main(String[] args){ Double a = 7.77; Double b = 3.33; System.out.println(a-b); System.out.println(n

點數運算的精度問題

問題描述 在 JavaScript 中整數和浮點數都屬於 Number 資料型別,所有數字都是以 64 位浮點數形式儲存,即便整數也是如此。 所以我們在列印 1.00 這樣的浮點數的結果是 1 而非 1.00 。在一些特殊的數值表示中,例如金額,這樣看上去有點變扭,但是至少值是正確了。然而要

js 點數計算誤差解決方法

eg:一個整數*一個小數出現的結果是 計算機程式語言裡浮點數計算會存在精度丟失問題(或稱舍入誤差),其根本原因是二進位制和實現位數限制有些數無法有限表示 * 以下是十進位制小數對應的二進位制表示 * 0.1 >> 0.0001 1001 100

JavaScript 點數運算的精度問題

問題描述 在 JavaScript 中整數和浮點數都屬於 Number 資料型別,所有數字都是以 64 位浮點數形式儲存,即便整數也是如此。 所以我們在列印 1.00 這樣的浮點數的結果是 1 而非 1.00 。在一些特殊的數值表示中,例如金額,這樣看上去有點變扭,但是至少值是正確了。然而要命的是,當浮點數做

upc 8378: Floating-Point Numbers(模擬點數運算

8378: Floating-Point Numbers 時間限制: 1 Sec  記憶體限制: 128 MB 提交: 10  解決: 4 [提交] [狀態] [討論版] [命題人:admin] 題目描述 In this problem, we consider f

jquery中點數運算結果保留兩位小數的方法

今天在偶然用到了一個簡單的運算,38.6-38.2,結果竟然是0.3999999999999986,一般來說肯定是0.4。 通過查詢,瞭解到,計算機內部的二進位制是無法精確表達0.1,0.2之類的數字的。 原理: 像簡單的0.1 用十進位制表示:1×10^-1 ,也就是0.1 而用二進位制表

js運算精度問題和IEEE754

原文連結 當我們使用一段時間的JS之後會遇到下面這個問題 0.1 + 0.2 === 0.3 // false 我們可以在控制檯裡面看到0.1+0.2輸出的並不是0.3而是0.30000000000000004。那麼為什麼出現這樣的問題呢。 其實