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

 更新时间:2020年6月25日 11:44  点击:1901
项目中要用到以截断的方式取小数点后两位,故写了以下方法:
复制代码 代码如下:

/// <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)
[!--infotagslink--]

相关文章

  • mybatis 返回Integer,Double,String等类型的数据操作

    这篇文章主要介绍了mybatis 返回Integer,Double,String等类型的数据操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-25
  • C#中decimal保留2位有效小数的实现方法

    这篇文章主要介绍了C#中decimal保留2位有效小数的实现方法,针对decimal变量保留2位有效小数有多种方法,可以使用Math.Round方法以及ToString先转换为字符串等操作来实现。具体实现方法感兴趣的朋友跟随小编一起看看吧...2020-06-25
  • C#中Decimal类型截取保留N位小数并且不进行四舍五入操作

    这篇文章主要介绍了C#中Decimal类型截取保留N位小数并且不进行四舍五入操作,本文给出需求说明和实现代码,需要的朋友可以参考下...2020-06-25
  • MySQL中Decimal类型和Float Double的区别(详解)

    下面小编就为大家带来一篇MySQL中Decimal类型和Float Double的区别(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-04-03
  • Java double转BigDecimal的注意事项说明

    这篇文章主要介绍了Java double转BigDecimal的注意事项说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-20
  • Java BigDecimal案例详解

    这篇文章主要介绍了Java BigDecimal案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...2021-08-11
  • .net decimal保留指定的小数位数(不四舍五入)

    大家都知道decimal保留指定位数小数的时候,.NET自带的方法都是四舍五入的。那么如何让decimal保留指定位数小数的时候不四舍五入呢,下面通过这篇文中的示例代码来一起看看吧。...2021-09-22
  • mysql decimal数据类型转换的实现

    这篇文章主要介绍了mysql decimal数据类型转换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-06
  • Python decimal模块使用方法详解

    这篇文章主要介绍了Python decimal模块使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-09
  • 详细分析sqlserver中的小数类型(float和decimal)

    这篇文章主要介绍了sqlserver中的小数类型的相关知识,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-12-08
  • C# double和decimal数据类型以截断的方式保留指定的小数位数

    从事ASP.NET in C#开发快一年了,今天才知道,C#中保留小数位数时没有使用截断的方式...2020-06-25
  • C语言double和float 实例分析

    本文主要介绍了C语言中的浮点数(float,double),并通过实例代码进行分析比较,希望能帮助学习相关知识的同学...2020-04-25
  • C#中Convert.ToDecimal()报错问题的解决

    这篇文章主要给大家介绍了关于C#中Convert.ToDecimal()报错问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。...2020-06-25
  • SqlServer数据库中decimal 和 numeric的区别是什么?

    decimal 和 numeric 在 SQL 标准中可以说是一样一样的,在SQL Server 中是一样的(参考:decimal 和 numeric (Transact-SQL)),可以查看类型定义确认:SELECT * FROM sys.types WHERE...2019-03-15
  • Python decimal模块的使用示例详解

    decimal模块decimal意思为十进制,这个模块提供了十进制浮点运算支持,本篇文章主要给大家讲解Pythondecimal模块的使用,需要的朋友可以参考下...2023-03-14
  • JsonCpp中double的问题解决

    本文主要介绍了JsonCpp中double的问题解决,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2022-02-23
  • JSON反序列化Long变Integer或Double的问题及解决

    这篇文章主要介绍了JSON反序列化Long变Integer或Double的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2022-01-13