系列文章
C#底层库–万能进制转换器(自定义有序字符,支持任意进制)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/130444724
C#底层库–StringExtension字符串扩展类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129520428
C#底层库–MySQL数据库访问操作辅助类(推荐阅读)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126886379
C#底层库–SQLBuilder构建类(自研ORM)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129179216
C#底层库–XML配置参数读写辅助类(推荐阅读)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129175304
C#底层库–数据库类型与程序类型转换器
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128817610
C#底层库–文件上传辅助类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128817487
C#底层库–RegexHelper正则表达式辅助类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/109745286
C#底层库–程序日志记录类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/124187709
C#底层库–排序算法帮助类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/124495730
C#底层库–SQLite的使用(轻量、单击数据库)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/123666958
C#底层库–获取文件版本和MD5值
本文链接:https://blog.csdn.net/youcheng_ge/article/details/112513871
C#底层库–文件操作类(文件重命名、目录移动、字节流转换)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126887161
C#底层库–Excel数据读取类(可读加密表格)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126887445
C#底层库–随机数生成器
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126888812
C#底层库–CSV和DataTable相互转换
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128804367
C#底层库–JSON使用教程_详细(序列化、反序列化、转DataTable)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128805705
C#底层库–cookie使用教程
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128816347
C#底层库–Session操作辅助类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128817096
C#底层库–Image图片操作类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128805298
C#底层库–图片增加水印辅助类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128817184
C#底层库–数据实体类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128816638
C#底层库–网络通信帮助类HTTP
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126886697
前言
本专栏为【底层库】,主要介绍编程过程中 通用函数。我们将这些通用固化的源码,进行重写、封装、拓展,再进行单元测试、集成测试、beta测试,最终形成通用化模板,这里我们称为“底层库”。
作为研发人员的你,并不需要花大量时间,研究“底层库”的含义,及“底层库”的实现方法。你只需要几行调用代码,就可以解决项目上碰到的难题。而底层库使用方法,本专栏均有详细介绍,也有项目应用场景。
底层库已实现功能:MySQL脚本构建器、MySQL数据库访问操作、参数配置文件读写、加解密算法、日志记录、HTTP通信、Socket通信、API前后端交互、邮件发送、文件操作、配置参数存储、Excel导入导出、CSV和DataTable转换、压缩解压、自动编号、Session操作等。
本专栏会持续更新,不断优化【底层库】,大家有任何问题,可以私信我。本专栏之间关联性较强(我会使用到某些底层库,某些文章可能忽略介绍),如果您对本专栏感兴趣,欢迎关注,我将带你用最简洁的代码,实现最复杂的功能。
一、底层库作用
DecimalUtil数值扩展类,将小数值按指定的小数位数舍入、将小数值按指定的小数位数截取、检查数值小数位:超出指定长度抛出异常信息.
二、底层库源码
创建类DecimalUtil.cs,复制以下代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Common
{
/// <summary>
/// 数值扩展
/// </summary>
public static class DecimalUtil
{
/// <summary>
/// 将小数值按指定的小数位数舍入
/// 解决SAP接口自动将3位小数后加0转为4位小数报错Server Error的问题
/// </summary>
/// <param name="d">要舍入的小数</param>
/// <param name="decimals">返回值中的小数位数,默认3</param>
/// <returns></returns>
public static decimal AppRound(this decimal d, int decimals = 3)
{
var multiple = (decimal)Math.Pow(10, decimals);
//竟然带上MidpointRounding.AwayFromZero的四舍五入才是对的
var result = Math.Round(d * multiple, MidpointRounding.AwayFromZero) / multiple;
return result;
}
/// <summary>
/// 将小数值按指定的小数位数舍入
/// 解决SAP接口自动将3位小数后加0转为4位小数报错Server Error的问题
/// </summary>
/// <param name="d">要舍入的小数</param>
/// <param name="decimals">返回值中的小数位数,默认3</param>
/// <returns></returns>
public static double AppRound(this double d, int decimals = 3)
{
var multiple = Math.Pow(10, decimals);
//竟然带上MidpointRounding.AwayFromZero的四舍五入才是对的
var result = Math.Round(d * multiple, MidpointRounding.AwayFromZero) / multiple;
return result;
}
/// <summary>
/// 将小数值按指定的小数位数截取
/// </summary>
/// <param name="d">要截取的小数</param>
/// <param name="decimals">返回值中的小数位数</param>
/// <returns></returns>
public static decimal AppCut(this decimal d, int decimals)
{
var strDecimal = d.ToString();
var index = strDecimal.IndexOf(".");
if (index == -1 || strDecimal.Length < index + decimals + 1)
{
strDecimal = string.Format("{0:F" + decimals + "}", d);
}
else
{
var length = index;
if (decimals != 0)
{
length = index + decimals + 1;
}
strDecimal = strDecimal.Substring(0, length);
}
return decimal.Parse(strDecimal);
}
/// <summary>
/// 将小数值按指定的小数位数截取
/// </summary>
/// <param name="d">要截取的小数</param>
/// <param name="decimals">返回值中的小数位数</param>
/// <returns></returns>
public static double AppCut(this double d, int decimals)
{
var strDecimal = d.ToString();
var index = strDecimal.IndexOf(".");
if (index == -1 || strDecimal.Length < index + decimals + 1)
{
strDecimal = string.Format("{0:F" + decimals + "}", d);
}
else
{
var length = index;
if (decimals != 0)
{
length = index + decimals + 1;
}
strDecimal = strDecimal.Substring(0, length);
}
return double.Parse(strDecimal);
}
/// <summary>
/// 检查数值小数位:超出指定长度抛出异常信息
/// </summary>
/// <param name="d">数值</param>
/// <param name="decimals">小数位长度:默认3位</param>
public static void CheckDecimalPlaces(this decimal d, int decimals = 3)
{
if (d == 0)
return;
var dStr = d.ToString();
var dStrArr = dStr.Split(new string[] { "." }, StringSplitOptions.RemoveEmptyEntries);
if (dStrArr.Length > 1 && dStrArr[1].Length > decimals)
throw new Exception($"操作量 {d} 小数位不能大于 {decimals} 位,请确认!");
}
}
}
三、使用方法
无
四、项目样例
无
五、资源链接
无