1. 程式人生 > >php 四捨六入(銀行家舍入)實現

php 四捨六入(銀行家舍入)實現

專案中要用到銀行家舍入方法,php沒有現成的方法,所以寫了一個

function up6down4($num,$n){		
    $pow = pow(10,$n);
    $con_a = floor(round($num * $pow * 10,1));
    $con_b = floor(round($num * $pow,1));
    $con_c = ($num * $pow * 10);
    $len = strlen(str_replace('.','',$con_c))-strlen($con_a);

	//捨去位為5 && 捨去位後無有效數字 && 捨去位前一位是偶數 ->不進位
    if(($con_a % 5 == 0) && bccomp($con_a,$con_c,($len))==0 && ($con_b % 2 ==0) ){
        return floor($num * $pow)/$pow;
    }else{//四捨五入
        return round($num,$n);
    }
}


相關推薦

php 銀行家實現

專案中要用到銀行家舍入方法,php沒有現成的方法,所以寫了一個 function up6down4($num,$n){ $pow = pow(10,$n); $con_a = floor(round($num * $pow * 10,1)); $

php五成雙演算法

四捨六入五成雙演算法,本文是用php實現 1.四捨六入五成雙是什麼?首先看一下百度百科怎麼定義的: 2.php封裝方法 public function calculate($num,$precision){ $pow = pow(10,$precision

JS toFixed銀行家及其缺陷和解決方法

所謂銀行家舍入法,其實質是一種四捨六入五取偶(又稱四捨六入五留雙)法。 據說,大部分的程式設計軟體都使用的是這種方法,也算是一種國際標準。 所謂銀行家舍入法,其實質是一種四捨六入五取偶(又稱四捨六入五留雙)法。其規則是:當捨去位的數值小於5時,直接捨去該位;當捨去位的數值大於等於6時,在捨去該位

走入計算機的第css語法二

font 最大 function 不但 err 劃線 目的 osi css屬性 一 屬性選擇器 E[att] 匹配所有具有att屬性的E元素,不考慮它的值。(註意:E在此處可以省略。 比如“[cheacked]”。以下同。

四捨五入VS銀行家 (五取偶)

相信細心的程式設計師們早就發現了.net環境下預設舍入演算法的是“四捨六入”的演算法。從小學我們就學過“四捨五入”演算法,但是更加科學的舍入辦法應該是“四捨六入”,也就是今天我們要討論的“銀行家舍入”。 大家可以做一個Demo。 C#環境下 1: class Pr

銀行家演算法

Java5以上使用銀行家的舍入法則很簡單。直接使用RoundingMode類提供的Round模式即可 public class Client { public static void main(String[] args) { //存款 BigDecimal d = new Big

VB6-對數值的-四捨五入/五留雙-及推廣

裝作自己厲害到能寫部落格了… 真的只是個水貼…做的比我好的不是大有人在了 而是不計其數了 最簡單的 四捨五入到個位: Iris= Int(Lily + 0.5) 推廣到 四捨五入到10^P位: Iris = Int(Lily * 10 ^ (-P) + 0.5)

【測繪專用】五成雙的C++實現

作為一名測繪專業的學生,在內業計算中經常遇到遇到小數點後保留幾位小數的問題。根據《工程測量實驗教程》(王宇會 著)一書,內業計算按“四捨六入,五前單進雙舍(或稱奇進偶不進)”的取捨規則進行尾數的取捨。如資料1.1235和1.1245小數點後保留三位時,均應為1.124 //四捨六入五成雙的基於

Math.Round五成雙和double.tostring()的用法

在C#中大家都會遇到這種情況 double型別的資料,需要格式化(保留N未有效數字)或者是保留N為小數等情況,我們往往採取double.tostring("引數");的方法。下面就列出幾個常用的方法。 double temp=3.1415926; (F)Fixed point:string str1=

在Excel中自定義函式Round46()

'================================ ' 四捨六入函式 ' ' 演算法:四合六入五考慮,五後非零就進一,五後皆零看奇偶,五前為偶應捨去,五前為奇要進一。 ' 作者:崔軍明 ' 編寫:2011-1-14 ' 修改:2011-1-15 '=======================

五成雙的浮點轉整型的巨集定義

原來浮點轉整型,如果用C或是C++強制轉換的話,小數部分就全部都捨去了。 如:float temp=2.55; (int)temp=2 如果想四捨五入呢?注意,這裡的四捨五入不是傳統的四捨五入,因為四捨五入的誤差很大,正確的方法為:四捨六入五成雙,如果小數為:5,則根據前面

【JavaScript】Tofixed(),五湊偶,修改成四捨五入

tofixed(),四捨六入五湊偶,修改成四捨五入 方法一: 在JS中四捨五入的函式 toFixed(n) , n為要保留的小數位數。 n為0~20,當n超過20的時候,JS會出錯。 如果小數點前和要擷取的前一位都是0時,不會按常理擷取。

JS toFixed 五成雙

以前一直以為toFixed就是四捨五入的方法,後來又有一段時間以為toFixed是五舍六入。今天終於寫的時候,終於才知道toFixed是一個叫做四捨六入無成雙的詭異的方法。。。 完全不明白為什麼要這麼寫。。。 什麼是四捨六入五成雙:百度是這麼說的: 對於位數很多的近似數

在Excel中用函式實現數字“五湊偶”

“四捨六入五湊偶”取整 =IF((A1*10-INT(A1)*10)<=4,INT(A1),IF((A1*10-INT(A1)*10)>=6,INT(A1)+1,INT((INT(A1)+1)/2)*2)) “四捨六入五湊偶”保留一位小數 =IF((A1*100-

C語言與c++標準輸出底層細節-五成雙

引言:相信每個學生從小學就被教導要四捨五入,那四捨五入真的通用嗎? 四捨六入五成雙: 1."四捨六入五成雙"是什麼?     這是一種數字修約規則,一種比四捨五入更加精確科學的計數保留法.     其實就是在進位時四舍六進,為五時若後面有有效數字則捨去進1,否則前

C# 四捨五入 (解決五成雙的問題)

四捨六入五成雙是一種精確度的計數保留法.舍入規律是"四捨六入五成雙",這裡"四"是小於五的意思,"六"是大於五的意思,"五"是舍入位之後的尾數逢五的話看前一位,奇進偶不進,就像1.25,因為2是偶數,所以是1.2。又像1.35,因為3是奇數,所以是1.4,明不明白,這個是資料

JAVA

規則:四捨六入五考慮,五後非零就進一,五後皆零看奇偶,五前為偶應捨去,五前為奇要進一。為了避免四捨五入規則造成的結果偏高,誤差偏大的現象出現,一般採用四捨六入五留雙規則。 // 1.當尾數小於或等於4時,直接將尾數捨去 System.out.pr

SqlServer2005 五成雙 函式

SqlServer2005 用到了四捨六入五成雙,結果網上找了下,沒一個能行的。到處都是複製,轉帖的,亂七八糟。隨花時間寫了一個 僅僅經過了自己少數驗證,所以僅供參考,如發現錯誤請指正,謝謝! --=

php計算柱和節氣轉 + 修改BUG

對網上能搜到的版本,修改了月柱取得會是 -1 的BUG //四柱即出生人的出生年、月、日、時分別稱之為年柱、月柱、日柱和時柱;以天干地支紀年法表示出來每柱兩個字,共八個字也稱生辰八字,用以推算個人運程。 //年柱和月柱都需要傳農曆的年和月,日柱和時柱都是公曆的幾號和幾時。 cl

銀行家

今天看到tf.round函式,指明使用的是銀行家舍入 搜尋了下銀行家舍入: 四捨六入五考慮,五後非零就進一,五後為零看奇偶,五前為偶應捨去,五前為奇要進一。 銀行家舍入是IEEE規定的小數舍入標準之一,也是IEEE目前規定中最優秀的舍入方法,因此所有符合 IEEE 標準的語言都應該實現