C#
/// <summary> /// 數據修約 -- 四舍六入5成雙,至少保留一位有效位 /// 數值0.00512,保留2位,修約為0.01 /// </summary> /// <param name="modifyValue">原始數據</param> /// <param name="degit">保留位數</param> /// <returns></returns> public static string CalcValue(decimal modifyValue, int? degit) { decimal calValue = 0; int degitNotNull = degit ?? 2; calValue = Math.Round(modifyValue, degitNotNull); //按此修約為0則至少保留1位有效位數 if (calValue == 0 && modifyValue != 0) { return modifyValue.ToString("G1"); } else { return calValue.ToString("F" + degitNotNull); } }
/// <summary> /// 數據修約 -- 四舍六入5成雙,至少保留一位有效位 /// 數值0.00512,保留2位,修約為0.005 /// </summary> /// <param name="modifyValue">原始數據</param> /// <param name="degit">保留位數</param> /// <returns></returns> public static string CalcValue2(decimal modifyValue, int? degit) { decimal calValue = 0; int degitNotNull = degit ?? 2; if (Math.Abs(modifyValue) >= 1) { calValue = Math.Round(modifyValue, degitNotNull); } //按此修約為0則至少保留1位有效位數 if (calValue == 0 && modifyValue != 0) { string value = modifyValue.ToString(); //從小數點后 value = value.Substring(value.IndexOf(".") + 1); for (int i = 0; i < value.Length; i++) { if ((i + 1) < degitNotNull) { calValue = Math.Round(modifyValue, degitNotNull); } else { calValue = Math.Round(modifyValue, (i + 1)); } } return calValue.ToString(); } else { return calValue.ToString("F" + degitNotNull); } }
SQL Server:
ROUND函數為四舍五入
/*四舍六入五成雙*/ if object_id('fnRound') is not null drop function fnRound GO create function fnRound(@num float,@i int) returns varchar(20) as begin declare @str varchar(20) /*轉換成字符類型*/ declare @str2 varchar(20) /*小數位數后面的字符串*/ declare @str3 varchar(2) /*小數位數字符串*/ set @str = convert(varchar,@num) if (charindex('.',reverse(@str)) <= 0) begin if @i > 0 begin set @str = @str + '.' while @i > 0 begin set @str = @str + '0' set @i = @i - 1 end end return @str end set @str2 = reverse(substring(reverse(@str),1,charindex('.',reverse(@str)) - 1 - @i)) set @str3 = substring(@str,charindex('.',@str) + 1,@i) if @str2%5 = 0 and @str3%2 = 0 /*如果符合"五成雙"*/ set @str = substring(@str,1,charindex('.',@str) + @i) else /*否則四舍五入*/ set @str = convert(varchar,round(@num,@i)) RETURN @str end GO