C# double和decimal数据类型以截断的方式保留指定的小数位数

 更新时间:2012年05月23日 15:58:47   作者:  
从事ASP.NET in C#开发快一年了,今天才知道,C#中保留小数位数时没有使用截断的方式
项目中要用到以截断的方式取小数点后两位,故写了以下方法:
复制代码 代码如下:

/// <summary>
/// 将小数值按指定的小数位数截断
/// </summary>
/// <param name="d">要截断的小数</param>
/// <param name="s">小数位数,s大于等于0,小于等于28</param>
/// <returns></returns>
public static decimal ToFixed(decimal d, int s)
{
decimal sp = Convert.ToDecimal(Math.Pow(10, s));

if (d < 0)
return Math.Truncate(d) + Math.Ceiling((d - Math.Truncate(d)) * sp) / sp;
else
return Math.Truncate(d) + Math.Floor((d - Math.Truncate(d)) * sp) / sp;
}

/// <summary>
/// 将双精度浮点值按指定的小数位数截断
/// </summary>
/// <param name="d">要截断的双精度浮点数</param>
/// <param name="s">小数位数,s大于等于0,小于等于15</param>
/// <returns></returns>
public static double ToFixed(double d, int s)
{
double sp = Math.Pow(10, s);

if (d < 0)
return Math.Truncate(d) + Math.Ceiling((d - Math.Truncate(d)) * sp) / sp;
else
return Math.Truncate(d) + Math.Floor((d - Math.Truncate(d)) * sp) / sp;
}

顺带提一下:
double和decimal的ToString("#.##")方法使用的是四舍五入;
静态类System.Math下的Round(decimal d, int decimals)方法,舍入的方式使用的是“四舍六入五成双”;
静态类System.Math下的Round(decimal d, int decimals, MidpointRounding mode)的第三个参数是枚举参数,指示如何处理中间值(5);
静态类System.Math的方法:http://msdn.microsoft.com/zh-cn/library/system.math_methods(v=vs.80)

相关文章

  • C#7.0中新特性汇总

    C#7.0中新特性汇总

    C#7.0 增加了许多新功能,并专注于数据消费,简化代码和性能的改善。接下来通过本文给大家介绍C#7.0中新特性汇总,需要的朋友可以参考下
    2016-08-08
  • C#去除字符串中的反斜杠实例(推荐)

    C#去除字符串中的反斜杠实例(推荐)

    下面小编就为大家分享一篇C#去除字符串中的反斜杠实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • C#文件上传的简单实现

    C#文件上传的简单实现

    这篇文章主要为大家详细介绍了C#文件上传的简单实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • Unity3D UGUI实现翻书特效

    Unity3D UGUI实现翻书特效

    这篇文章主要为大家详细介绍了Unity3D UGUI实现翻书特效,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • WPF弹出自定义窗口的方法

    WPF弹出自定义窗口的方法

    这篇文章主要介绍了WPF弹出自定义窗口的方法,结合实例形式分析了WPF自定义窗口的创建与调用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • 如何利用C#打印九九乘法表

    如何利用C#打印九九乘法表

    这篇文章主要给大家介绍了关于如何利用C#打印九九乘法表的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 从C#程序中调用非受管DLLs的方法

    从C#程序中调用非受管DLLs的方法

    这篇文章主要介绍了从C#程序中调用非受管DLLs的方法,是非常实用的技巧,有助于深入理解Windows程序设计,需要的朋友可以参考下
    2014-10-10
  • 关于Unity C# Mathf.Abs()取绝对值性能测试详解

    关于Unity C# Mathf.Abs()取绝对值性能测试详解

    这篇文章主要给大家介绍了关于Unity C# Mathf.Abs()取绝对值性能测试的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Unity C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • C#进制之间的相互转换详解

    C#进制之间的相互转换详解

    关于进制之间的相互转换,很多人觉得进制较多,所以转换起来比较麻烦,笔者今天在这里说下,进制虽然较多,但其实转换的算法几近相同
    2013-11-11
  • 实例详解C#实现http不同方法的请求

    实例详解C#实现http不同方法的请求

    本篇文章给大家分享了C#实现http不同方法的请求的相关知识点以及实例代码,有需要的朋友参考下。
    2018-07-07

最新评论