37.5*5.5=206.08 (JS算出來是這樣的一個結果,我四捨五入取兩位小數)
我先懷疑是四捨五入的問題,就直接用JS算了一個結果為:206.08499999999998
怎麼會這樣,兩個只有一位小數的數字相乘,怎麼可能多出這麼小數點出來。
我Google了一下,發現原來這是JavaScript浮點運算的一個bug。
例如:7*0.8 JavaScript算出來就是:5.6000000000000005
網路上找到了一些解決方法,就是重新寫了一些浮點運算的函數或直接擴大倍數運算。
下面就把這些方法摘錄下來,以供遇到同樣問題的朋友參考:
//除法函數,用來得到精確的除法結果
//說明: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);
}
}
//為Number型別增加一個div方法,呼叫起來比較方便。
Number.prototype.div = function (arg){
return accDiv(this, arg);
}
//乘法函數,用來得到精確的乘法結果
//說明: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)
}
//為Number型別增加一個mul方法,呼叫起來比較方便。
Number.prototype.mul = function (arg){
return accMul(arg, this);
}
//加法函數,用來得到精確的加法結果
//說明: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的減法結果會有誤差,在兩個浮點數相加的時候會比較明顯。這個函數會傳回較精確的減法結果。
//呼叫:accSubtr(arg1,arg2)
//回傳值:arg1減去arg2精確的結果
function accSubtr(arg1,arg2){
var r1,r2,m,n ;
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));
//動態控制精確度長度
n=(r1>=r2)?r1:r2;
return ((arg1*m-arg2*m)/m).toFixed(n);
}
//給Number型增加一個subtr 方法,呼叫起來更加方便。
Number.prototype.subtr = function (arg){
return accSubtr(arg,this);
}
在你要用的地方包含這些函數,然後呼叫它來計算就可以了。
/如果在知道小數位個數的前提下,可以考慮通過將浮點數放大倍率到整數(最後再除以相應倍數),再進行運算操作,這樣就能得到正確的結果了
<script> <BR>alert(11*(22.910 )/10);<BR></script>

PHP 是一门功能强大的编程语言,广泛应用于 Web 开发领域。其中一个非常常见的情况是需要将字符串转换为小数。这在进行数据处理的时候非常有用。在本文中,我们将介绍如何在 PHP 中将字符串转换为小数。

这篇文章将为大家详细讲解有关PHP浮点数四舍五入法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP浮点数四舍五入法概述浮点数在计算机中表示为小数点后跟指数,然而,它们通常以有限位数的近似值存储。当需要将浮点数四舍五入到特定精度时,有几种方法可以实现。方法1.round()函数round()函数将浮点数四舍五入为最接近的整数。它接受浮点数和可选的精度参数。例如:$num=1.55;echoround($num);//输出:2echoround($num,1)

使用strconv.FormatFloat函数将浮点数转换为字符串在Go语言中,我们经常需要将浮点数转换为字符串类型,用于输出或者存储等需求。Go语言中提供了strconv包,其中的FormatFloat函数可以将浮点数转换为字符串类型。FormatFloat函数有三个参数:f表示要转换的浮点数,fmt表示格式,以及prec表示要保留的小数位数。其中,f参数

PHP作为一种流行的服务器端脚本语言,在进行浮点数计算时常常会遇到精度丢失或计算误差的问题,这些问题可能会对程序的准确性和稳定性造成影响。本文将探讨PHP浮点数计算误差的原因,并提出一些避免策略,同时给出具体的代码示例供参考。1.PHP浮点数计算误差的原因在计算机中,浮点数是以二进制形式表示的,而二进制并不能精确地表示所有的十进制小数,这就导致了浮点数的精

系统bage就是指系统bug;bug原意是“臭虫”,现可用来指代计算机上存在的漏洞,原因是系统安全策略上存在的缺陷,有攻击者能够在未授权的情况下访问的危害;广义上,bug可用作形容各领域范围内出现的漏洞或缺陷。

:一、BCMath简介BCMath是PHP内置的一个扩展库,专门用于处理大型整数和浮点数运算。它提供了丰富的函数来进行加、减、乘、除、平方、开方等各种数学运算,并且支持多种进制的数字表示。二、BCMath的优势BCMath相较于php原生提供的算术运算符和函数,主要有以下几个方面的优势:精度更高:BCMath的运算结果可以保留更多的有效数字,这对于涉及大数计算的场景尤为重要。范围更广:BCMath可以处理比PHP原生数据类型更大的数字,从而避免溢出或精度丢失的问题。功能更丰富:BCMath提供了

使用C#中的Math.Round函数对浮点数进行四舍五入,需要具体代码示例在C#编程语言中,有时候我们需要对浮点数进行四舍五入操作。这时,我们可以使用Math.Round函数来实现此功能。Math.Round函数是C#中一个用于数学计算的内置函数,其主要功能是对指定的浮点数进行四舍五入。下面是Math.Round函数的常用格式:Math.Round(doub

将字符串转换为浮点数是在PHP中常见的操作,可以通过内置的方法来实现。首先要确保字符串是合法的浮点数格式,才能成功地转换为浮点数。下面将详细介绍如何在PHP中将字符串转换为浮点数,并提供具体的代码示例。一、使用(float)强制转换在PHP中,将字符串转换为浮点数最简单的方式就是使用强制转换。强制转换的方式是在字符串前加上(float)即可,PHP会自动将其


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境