1. 程式人生 > >SqlServer2005 四捨六入 四捨六入五成雙 函式

SqlServer2005 四捨六入 四捨六入五成雙 函式

SqlServer2005 用到了四捨六入五成雙,結果網上找了下,沒一個能行的。到處都是複製,轉帖的,亂七八糟。隨花時間寫了一個

僅僅經過了自己少數驗證,所以僅供參考,如發現錯誤請指正,謝謝!

--========================================
-- Author: SSQ
-- Date: 2014年11月7日
-- Desc: 四捨六入五成雙
-- Demo: SELECT dbo.FnRound(1.95,1)
--========================================
CREATE FUNCTION FnRound(@num DECIMAL(18,10),@i INT) 
	RETURNS VARCHAR(20)
AS	
BEGIN
	DECLARE 
		@str VARCHAR(20),	--轉換成字元型別
		@str1 VARCHAR(20),	--保留小數位之前的字串
		@str2 VARCHAR(20),	--小數位數後面的字串
		@str3 VARCHAR(2),	--小數位奇偶判斷
		@str4 VARCHAR(1),	--是不是5
		@p INT,			--小數點位置
		@r DECIMAL(18,10),	--保留位置之前數值
		@v DECIMAL(18,10)	--進位時增加值

	SET @v='0.'+RIGHT('000000000001',@i)

	SET @str = CONVERT(VARCHAR(200), @num) 
	--PRINT @str	
	SET @p=CHARINDEX('.',@str)
	SET @str1=SUBSTRING(@str,0,@
[email protected]
) --PRINT @str1 SET @str2 = SUBSTRING(@str,@p+1,LEN(@str)[email protected]) --PRINT @str2 --指定小數位奇偶判斷 SET @str3=SUBSTRING(@str2,@i,1) --PRINT @str3 --擷取保留小數的後一位,看是不是5 SET @str4=SUBSTRING(@str2,@i+1,1) --PRINT @str4 IF @str4='5' --是5 BEGIN IF @str3%2<>0 --奇數 BEGIN SET @r=CONVERT(DECIMAL(18,10),@str1)+ @v --進位 END ELSE SET @r=CONVERT(DECIMAL(18,10),@str1) END ELSE SET @r=ROUND(CONVERT(DECIMAL(18,10),@num),@i) --普通處理 RETURN @r END


相關推薦

SqlServer2005 函式

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

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=

的浮點轉整型的巨集定義

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

JS toFixed

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

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

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

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

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

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

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

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

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

php (銀行家舍)實現

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

次課

linux十六周四次課19.12 添加自定義監控項目19.13/19.14 配置郵件告警19.15 測試告警19.16 不發郵件的問題處理19.12 添加自定義監控項目添加自定義監控項目需求:監控某臺web的80端口連接數,並出圖兩步:1)zabbix監控中心創建監控項目;2)針對該監控項目以圖形展現對於第一

、Linux監控平臺介紹、zabbix監控介紹、安裝zabbix、忘記Admin密碼如何做

LInux監控平臺介紹 zabbix監控介紹 安裝zabbix 忘記Admin密碼如何做 六十四、Linux監控平臺介紹、zabbix監控介紹、安裝zabbix、忘記Admin密碼如何做一、Linux監控平臺介紹 cacti、nagios、zabbix、smokeping、open-falco

學習

linux學習5月30日任務20.5 shell腳本中的邏輯判斷20.6 文件目錄屬性判斷20.7 if特殊用法20.8/20.9 case判斷 shell腳本中的邏輯判斷 格式1:if 條件 ; then 語句; fi格式2:if 條件; then 語句; else 語句; fi格式3:if …; then

Linux學習總結()expect腳本下

文件同步 需要 send roo expect腳本 腳本批量 工具 lin 遠程主機 一 文件分發系統 需求背景對於大公司而言,肯定時不時會有網站或者配置文件更新,而且使用的機器肯定也是好多臺,少則幾臺,多則幾十甚至上百臺。所以,自動同步文件是至關重要的。實現思路首先要有一

階段組隊訓練賽第場( 題源:UKIEPC2017)

col radi gre network == led build period tro A: Alien Sunset 題目描述 Following tremendous advances in space flight control software and equa

ElasticSearch最佳入門實踐()索引管理_定製化自己的dynamic mapping

1、定製dynamic策略 true:遇到陌生欄位,就進行dynamic mapping false:遇到陌生欄位,就忽略 strict:遇到陌生欄位,就報錯 定製 PUT /my_index { "mappings": { "my_t

吳恩達機器學習訓練祕籍整理三十十三章()訓練資料

第三十六章: 何時在不同的分佈上訓練與測試。 使用者上傳的10000張圖片。網上收集的200000張圖片。使用者上傳的5000張用來做開發集和測試集。205000用來做訓練集。這樣可以讓他們的資料集的分佈儘可能的相同。 第三十七章: 現有100000張使用者上傳的圖片和200000張

C++筆記 第課 C++中的異常處理(上)---狄泰學院

如果在閱讀過程中發現有錯誤,望評論指正,希望大家一起學習,一起進步。 學習C++編譯環境:Linux 第六十四課 C++中的異常處理(上) 1.C++異常處理 C++內建了異常處理的語法元素try…catch… try語句處理正常程式碼邏輯 catch語句處理異常情況 try

二十、python學習之前端():JQuery進階

一、jquery特殊效果: 1.特殊動畫: 1.1 特殊動畫函式: a.無參直接隱藏/顯示/切換,帶參變成動畫 函式 功能 hide() 隱藏元素