1. 程式人生 > >VB6-對數值的舍入-四捨五入/四捨六入五留雙-及推廣

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

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

再推廣到 n-1舍n入到10^P位 ,寫成你們拿去就能用的函式好了:

Public Function Miaow(ByVal Lily As Double, Optional ByVal P As Integer = 0, Optional ByVal n As Byte = 5) As Double 
    If n < 1 Or n > 9 Then
      MsgBox "數學不好的Iris並不能算出來呢"
      Exit Function
    End If
    Miaow = Int(Lily * 10 ^ (-P) + 0.1 * n) * 10 ^ P ‘★
  End Function

有★的那句才是重點…
以及 n-1舍n+1入n留I到10^P位 ,I = 0 時就是上式 ,I = 1 時留單 ,I = 2 時留雙:


  Public Function Meow(ByVal Lily As Double, Optional ByVal P As Integer = 0, Optional ByVal n As Byte = 5, Optional ByVal I As Byte = 0) As Double
    If n < 1 Or n > 9 Or I > 2 Then
      MsgBox "數學不好的Iris並不能算出來呢"
      Exit Function
    ElseIf (I > 0) And (Right(Trim(Str(Int(Lily * 10 ^ (-P - 1)))), 1) = Trim(Str(n))) Then
      Meow = IIf(Int(Lily * 10 ^ (-P) + 0.1 * n) * 10 ^ P Mod 2 = 2 - I, Int(Lily * 10 ^ (-P) + 0.1 * n) * 10 ^ P, Int(Lily * 10 ^ (-P)) * 10 ^ P)
    Else: Meow = Int(Lily * 10 ^ (-P) + 0.1 * n) * 10 ^ P
    End If
  End Function

上面if 的條件裡那一團不可名狀的東西是判斷尾數是不是n的
以及 覺得自己不可能填錯引數就把最前面的檢驗去掉…

這寫的是什麼啊…我自己都不想看 更不想優化 反正大概這個意思
俺尋思這能行.jpg
Meow這個函式我都沒有驗證能不能用…
反正前面的能用 試過了
嗯…那麼結束的時候該說些什麼呢…

相關推薦

VB6-數值-四捨五入/-推廣

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

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

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

php (銀行家)實現

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

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

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

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

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

銀行家演算法

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

php演算法

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

【測繪專用】的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,則根據前面

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,否則前

JAVA

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

SqlServer2005 函式

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

湊偶

末尾 導致 奇數 style 四舍五入 -s 進位 偶數 span 被修約的數字等於5時且5的後面沒有不為“0”的任何數,要看5前面的數字。 若是奇數則進位,若是偶數則將5舍掉,即修約後末尾數字都成為偶數; 若5的後面還有不為“0”的任何數,則此時無論5的前面是奇數還是

Python3基礎 str format 湊偶 保留一位小數

ati 書寫 credit py3 ive orm ogl doc 設計 ? python : 3.7.0 OS : Ubuntu 18.04.1 LTS

Math.Round是四捨五入還是

在開發中發現一個以前未注意到的問題, 以前一直以為Math.Round是按四捨五入的原則處理的(從小到大中國的教育課程就是這樣,至少我是這樣看到的), 沒想到時代在變化,國際形式日新月異(老外實在是有才)。 居然發現還有一個五舍六入的原則,下面是Math.Round

面向象設計原則之:依賴倒置原則

ron 通過 發生 需要 系統 面向對象設計 啟動 模塊 == 依賴倒置原則 所謂依賴倒置原則(Dependence Inversion Principle )就是要依賴於抽象,不要依賴於具體。簡單的說就是對抽象進行編程,不要對實現進行編程,這樣就降低了客戶與實