1. 程式人生 > >asp.net小數點【取整】和【四捨五入】的方法!

asp.net小數點【取整】和【四捨五入】的方法!

c# 四捨五入、上取整、下取整
Posted on 2010-07-28 12:54 碧水寒潭 閱讀(1446) 評論(0) 編輯 收藏

在處理一些資料時,我們希望能用“四捨五入”法實現,但是C#採用的是“四捨六入五成雙”的方法,如下面的例子,就是用“四捨六入五成雙”得到的結果:


double d1 = Math.Round(1.25, 1);//1.2
double d2 = Math.Round(1.24, 1);//1.2
double d3 = Math.Round(1.26, 1);//1.3
double d4 = Math.Round(1.35, 1);//1.4

為了用C#來實現“四捨五入”,我寫了下面的函式:


程式碼
     /// <summary>
    /// 實現資料的四捨五入法
   /// </summary>
    /// <param name="v">要進行處理的資料</param>
    /// <param name="x">保留的小數位數</param>
    /// <returns>四捨五入後的結果</returns>
    private double Round(double v, int x)
    {
        bool isNegative = false;
        //如果是負數
        if (v < 0)
        {
            isNegative = true;
            v = -v;
        }
int IValue = 1;
        for (int i = 1; i <= x; i++)
        {
            IValue = IValue * 10;
        }
        double  Int = Math.Round(v * IValue + 0.5, 0);
        v = Int / IValue;
if (isNegative)
        {
            v = -v;
        }
return v;
    }

經過簡單的測試,上面的函式能實現對資料的四捨五入法。

Math.Round ()在四捨五入時有個問題:   
Math.Round(2.5,0) = 2;   
Math.Round(3.5,0) = 4;
2.5應該等於3才對!
在ASP中也存在這個問題,不過ASP中還有個FormatNumber可以用,但目前還不知道怎麼使用?
解釋:
Math.Round()準確的說,這個函式不是四捨五入,而是四捨六入五湊偶,就是說小於4或大於6的該舍該入是沒有爭議的,而5處在正中間,如果四捨五入則會造成資料的整體偏差,所以採取的原則是:如果舍入位為5,則舍入後最後一位為偶數,這是國際慣例。
現在做的專案都要5入,解決方法:
目前做法是: 
如:(3.45*10+0.5)取整,再除以10
C# 中沒有四捨五入函式,事實上我知道的程式語言都沒有四捨五入函式,因為四捨五入演算法不科學,國際通行的是 Banker 舍入法 Banker 's rounding(銀行家舍入)演算法,即四捨六入五取偶。事實上這也是 IEEE 規定的舍入標準。因此所有符合 IEEE 標準的語言都應該是採用這一演算法的 
Math.Round 方法預設的也是 Banker 舍入法 在 .NET 2.0 中 Math.Round 方法有幾個過載方法 
Math.Round(Decimal, MidpointRounding) 
Math.Round(Double, MidpointRounding) 
Math.Round(Decimal, Int32, MidpointRounding) 
Math.Round(Double, Int32, MidpointRounding) 
將小數值舍入到指定精度。MidpointRounding 引數,指定當一個值正好處於另兩個數中間時如何舍入這個值 
該引數是個 MidpointRounding 列舉 
此列舉有兩個成員:
AwayFromZero 當一個數字是其他兩個數字的中間值時,會將其舍入為兩個值中絕對值較大的值。 
ToEven 當一個數字是其他兩個數字的中間值時,會將其舍入為最接近的偶數。 
所以,要實現四捨五入函式,對於正數,可以加一個 MidpointRounding.AwayFromZero 引數指定當一個數字是其他兩個數字的中間值時其舍入為兩個值中絕對值較大的值,例: 
Math.Round(3.45, 2, MidpointRounding.AwayFromZero) 
不過對於負數上面的方法就又不對了 
因此需要自己寫個函式來處理 
double ChinaRound(double value, int decimals) 

  if (value < 0) 
  { 
    return Math.Round(value + 5 / Math.Pow(10, decimals + 1), decimals, MidpointRounding.AwayFromZero); 
  } 
  else 
  { 
    return Math.Round(value, decimals, MidpointRounding.AwayFromZero); 
  } 

有些時候不一定要用四捨五入的,可能需要上取整或下取整:
Math.Ceiling()和Math.Floor 
Math.Ceiling(3.1)=4;    
Math.Floor(3.9)=3;
取天板值與地板值,與"四捨五入"無關。其實Floor的結果與(int)相同,因此也可以這樣寫Math.Floor((double)2/3+0.5)
floor 和 ceil是math unit 裡的函式,使用前要先 Uses Math。
trunc 和 round 是system unit 裡的函式,預設就可以用。
floor 直接往小的取,比如 floor(-123.55)=-124,floor(123.55)=123
trunc 直接切下整數,比如 trunc(-123.55)=-123, floor(123.55)=123
ceil 直接往大的取,比如 ceil(-123.55)=-123, ceil(123.55)=124
round 計算四捨五入,比如 round(-123.55)=-124,round(123.55)=124
C#取整函式向上取整例項
int a = 5; 

int b = 2;   

lbl.Text = Convert.ToString(Math.Ceiling((double)a / (double)b)); 

相關推薦

asp.net小數點四捨五入方法

c# 四捨五入、上取整、下取整 Posted on 2010-07-28 12:54 碧水寒潭 閱讀(1446) 評論(0) 編輯 收藏 在處理一些資料時,我們希望能用“四捨五入”法實現,但是C#採用的是“四捨六入五成雙”的方法,如下面的例子,就是用“四捨六入五成雙”得到的結果: double d1

踩坑經歷一次Asp.NET小網站部署踩坑解決經歷

  2013年給1個大學的小客戶部署過一個小型的Asp.NET網站,非常小,用的sqlite資料庫,今年人家說要換臺伺服器,要重新部署一下,好吧,雖然早就過了服務時間,但無奈誰叫人家是客戶了,二話不說,上,原始碼和以前的檔案都有,部署還不是分分鐘的事情,開啟IIS掛上去就行了。誰知道,這個部署將近花了2天的時

無私分享:ASP.NET CORE 專案實戰(第四章)Code First 建立資料庫資料表

目錄索引 簡介   本章我們來介紹下Asp.net Core 使用 CodeFirst 建立資料庫和表,通過 控制檯 和 dotnet ef 兩種方式 修改EF上下文物件,新增測試類   我修改了一下名字,Domains 改為了 wkmvc.Data   我們新建一個

Encrypt ConnectionString in Web.Config 加密ASP.NET web.config數據庫鏈接字串

note attribute translate sting ons cit eem different con 原文鏈接:https://www.codeproject.com/Tips/795135/Encrypt-ConnectionString-in-Web-Con

ASP.NET跨域請求中的問題CORS

瀏覽器的安全策略會阻止網頁向另一個站點發送ajax請求,同時也會阻止惡意站點從另一個站點讀取資料。這種限制被稱作“同源策略”。然而有時我們需要從一個站點訪問另一個站點,比如從一個站點訪問你的WebApi介面。 跨域資源共享-Cross Origin Resou

無私分享:ASP.NET CORE 專案實戰(第九章)建立區域Areas,新增TagHelper

目錄索引 簡介   在Asp.net Core VS2015中,我們發現還有很多不太簡便的地方,比如右擊新增檢視,轉到試圖頁等功能圖不見了,雖然我們可以通過工具欄的自定義命令,把這兩個右擊選單新增上,但是貌似是灰色的不能用。   其實,這樣也好,通過手動建立,更讓我們深刻的理解M

無私分享:ASP.NET CORE 專案實戰(第十章)釋出專案到 Linux 上執行 Core 專案

目錄索引 簡介   ASP.Net Core 給我們帶來的最大的亮點就是跨平臺,我在我電腦(win7)上用虛擬機器建了個 CentOS7 ,來演示下,我們windows上的專案如何釋出專案到Linux上執行。我這裡有個在windows上搭建過的程式,我們主要演示如何在linux上執

無私分享:ASP.NET CORE 專案實戰(第六章)讀取配置檔案(一) appsettings.json

目錄索引 簡介   在我們之前的Asp.net mvc 開發中,一提到配置檔案,我們不由的想到 web.config 和 app.config,在 core 中,我們看到了很多的變化,新的配置系統顯得更加輕量級,具有更好的擴充套件性,並且支援多樣化的資料來源。   部落格園對於這個的

無私分享:ASP.NET CORE 專案實戰(第八章)讀取配置檔案(二) 讀取自定義配置檔案

目錄索引 簡介   但隨之產生了問題:我們使用的是在 Startup.cs 中(如下圖)來實現配置讀取,有兩個問題 ① 我們如果定義N種配置,是否要再這裡新增N條這樣的配置 ; ② 如果我們的配置不想寫在appsettings.json中呢     解決問題

無私分享:ASP.NET CORE 專案實戰(第十三章)Asp.net Core 使用MyCat分散式資料庫,實現讀寫分離

目錄索引 簡介   MyCat2.0版本很快就釋出了,關於MyCat的動態和一些問題,大家可以加一下MyCat的官方QQ群:106088787。我們今天主要介紹一下,在我們的Asp.net Core中如何使用Mycat,這源於一個大神(Amamiya Yuuko)的分享,但是,這中

無私分享:ASP.NET CORE 專案實戰(第七章)檔案操作 FileHelper

目錄索引 簡介   在程式設計中,我們很多情況下,會用到對檔案的操作,在 上一個系列 中,我們有很多檔案基本操作的示例,在Core中有一些改變,主要是我們常用的Server.MapPath()不存在了,不知道後續的版本會不會有,在這裡,我們只能自己封裝方法去實現。今天,我們就對一些基本

無私分享:ASP.NET CORE 專案實戰(第五章)Repository倉儲 UnitofWork

1 public abstract class Repository<T> : IRepository<T> where T : class 2 { 3 #region 資料上下文 4 5 /// <s

無私分享:ASP.NET CORE 專案實戰(第三章)EntityFramework下領域驅動設計的應用

這好像就是比我的多了一個“中轉層”,把我們的介面作為了一箇中轉,領域層繼承了倉儲實現業務和資料操作,這有什麼實際意義嗎?希望大家指正一下: 我不理解的是,如果是按照這樣,那麼我如果要修改註冊方法,比如我要在上面方法中傳遞 eamil,name,password 的基礎上還需要傳遞手機號碼,那麼我需要修改

Java網絡編程Socket服務端客戶端

rgs .net aio highlight 如果 org author oid try Socket 編程大家都不陌生,Java 學習中必學的部分,也是 Java網絡編程核心內容之一。Java 網絡編程又包括 TCP、UDP,URL 等模塊。TCP 對應 Socket

Asp.net MVC使用FormsAuthentication,MVCWEB API可以共享身份認證 (轉載)

mlp ges web api nbsp 快速 charset 生成頁面 核心 lds 在實際的項目應用中,很多時候都需要保證數據的安全和可靠,如何來保證數據的安全呢?做法有很多,最常見的就是進行身份驗證。驗證通過,根據驗證過的身份給與對應訪問權限。同在Web Api中如何

ASP.NET Core配置環境變量啟動設置

aspASPNETCORE_ENVIRONMENT  ASP.NET Core控制環境切換最核心的東西是“ASPNETCORE_ENVIRONMENT”環境變量,它直接控制當前應用程序運行的環境類型。您可以通過在項目上右鍵菜單選擇“屬性”選項,然後切換到“調試”標簽來修改此環境變量。    此環境變量框架默認

ASP.NET 中JSON 的序列化反序列化

urn 序列 del nbsp parseint 代碼 href end user JSON是專門為瀏覽器中的網頁上運行的JavaScript代碼而設計的一種數據格式。在網站應用中使用JSON的場景越來越多,本文介紹ASP.NET中JSON的序列化和反序列化,主要對JSON

Asp.net Core 初探(發布部署Linux)

gin pro 1.0 connect 本地 部署 .dll vs2015 是我 Asp.net Core 初探(發布和部署Linux) 前言 俗話說三天不學習,趕不上劉少奇。Asp.net Core更新這麽長時間一直觀望,周末帝都小雨,宅在家看了下Co

ASP.NET中JSON的序列化反序列化

沒有 helper mic lar width pty on() dmi 包括 JSON是專門為瀏覽器中的網頁上運行的JavaScript代碼而設計的一種數據格式。在網站應用中使用JSON的場景越來越多,本文介紹ASP.NET中JSON的序列化和反序列化,主要對JSON的

ASP.NET Core使用HttpClient的同步異步請求

.text pcl gets 請求 con text timeout help ear using System; using System.Collections.Generic; using System.Net.Http; using System.Text