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

项目中要用到以截断的方式取小数点后两位,故写了以下方法:


代码如下:

/// <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)

(0)

相关推荐

  • C#实现任意数据类型转成json格式输出

    直接贴代码: 复制代码 代码如下: /// List转成json   /// </summary>  /// <typeparam name="T"></typeparam>  /// <param name="jsonName"></param>  /// <param name="list"></param>  /// <returns></

  • C#基础之数据类型转换

    int x; long y = 123456789101112; x = (int)y; Console.WriteLine(x); 输出结果: 我们知道long类型的取值范围是-9223372036854775805~+9223372036854775807:int类型的是:-2147483648~+2147483647 上面的代码中,由于long变量的值超过了int能容纳的最大值,造成了数据的丢失:像这样有可能造成数据丢失或引发异常的任何转换都需要执行显式转换(explicit); 相反的就

  • 使用c#构造date数据类型

    /*********************************** 作者:trieagle(让你望见影子的墙) 日期:2009.8.14 注: 转载请保留此信息 ************************************/ 使用c#构造date数据类型 在sql server2005没有实现date类型,但是提供了很好的扩展性,可以利用CLR来构造date类型.有一部分是参考了Fc的代码写的. 步骤: 1.在vs 2005中新建项目,一次选择c#-->>数据库-->&

  • c# 数据类型占用的字节数介绍

    bool -> System.Boolean (布尔型,其值为 true 或者 false) byte -> System.Byte (字节型,占 1 字节,表示 8 位正整数,范围 0 ~ 255) sbyte -> System.SByte (带符号字节型,占 1 字节,表示 8 位整数,范围 -128 ~ 127) char -> System.Char (字符型,占有两个字节,表示 1 个 Unicode 字符) short -> System.Int16 (短整型,

  • 数据库 数据类型float到C#类型decimal, float数据类型转化无效

    今天运行系统突然出错,数据类型转化无效,错误在system.data.sqlclient.get_decimal()方法,初步估计是数据库的float类型转换为c#的decimal类型时出错了,实体类使用的是decimal?类型,心想就算数据库里的数值是空,也不能出现转换错误啊. 网上百般搜索,很多人遇到类似情况,多数是直接去float类型时候出错,如(float)dr[0],后来看到有说应该是先转化成double,然后在转化成float就可以了 尝试了一下把实体类的decimal?类型的字段改

  • C#判断数据类型的简单示例代码

    C#判断数据类型的简单示例代码: 复制代码 代码如下: int   i   =   5; Console.WriteLine( "i is an int? {0}",i.GetType()==typeof(int)); Console.WriteLine( "i is an int? {0}",typeof(int).IsInstanceOfType(i));

  • 浅析C#数据类型转换的几种形式

    1.Convert.ToInt32(); //转换成32位的整数.2.变量.ToString();/最常见的转换成 字符串.3."订单"+2514 //后面的数字会转换为字符串.4.((类名A)对象名X) //强行将 对象X 转换成 A类 的对象.5.int.Parse(string);把字符串型转换成其他类型.6.还有,如果要转换成的类型为引用类型,还可以用 as teacher tea = teahcer();如 student stu = tea as student; (1)

  • c#数据类型基础

    1.值类型 值类型包括简单值类型和复合型类型.简单值类型可以再细分为整数类型.字符类型.实数类型和布尔类型:而复合类型则是简单类型的复合,包括结构(struct)类型和枚举(enum)类型. 整数类型 数据类型 说明 取值范围 对应于System程序集中的结构 sbyte 有符号8位整数 -128-127 SByte byte 无符号8位整数 0-255 Byte short 有符号16位整数 -32768-32767 Int16 ushort 无符号16位整数 0-65535 UInt16 I

  • C#的四种基本数据类型

    字符类型 char ,存储用''(单引号)括起来的一个字符,例如: char sex='男';//存储性别 字符串类型 string ,存储用""(双引号)括起来的一串字符,例如: string address="北京市宣武区牛街北口";//存储地址 整数类型 int ,存储整数,例如: int age=23;//存储年龄 双精度浮点型 double ,存储小数,例如: double salary=7991.63;//存储工资 以上四种是最常用的数据类型. 需要注意

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

    项目中要用到以截断的方式取小数点后两位,故写了以下方法: 复制代码 代码如下: /// <summary> /// 将小数值按指定的小数位数截断 /// </summary> /// <param name="d">要截断的小数</param> /// <param name="s">小数位数,s大于等于0,小于等于28</param> /// <returns></retur

  • .net decimal保留指定的小数位数(不四舍五入)

    前言 项目中遇到分摊金额的情况,最后一条的金额=总金额-已经分摊金额的和. 这样可能导致最后一条分摊的时候是负数,所以自己写了一个保留指定位数小数的方法. 扩展方法的使用,使得调用起来很优雅. 示例代码 public static class DecimalExtension { /// <summary> /// decimal保留指定位数小数 /// </summary> /// <param name="num">原始数量</param&

  • 浅谈MySQL中float、double、decimal三个浮点类型的区别与总结

    下表中规划了每个浮点类型的存储大小和范围: 类型 大小 范围(有符号) 范围(无符号) 用途 ==float== 4 bytes (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度 浮点数值 ==double== 8 bytes (-1.797 693 134 862 315 7 E

  • java使double保留两位小数的多方法 java保留两位小数

    复制代码 代码如下: mport java.text.DecimalFormat; DecimalFormat    df   = new DecimalFormat("######0.00"); double d1 = 3.23456  double d2 = 0.0;double d3 = 2.0;df.format(d1); df.format(d2); df.format(d3); 3个结果分别为: 复制代码 代码如下: 3.230.00 2.00 java保留两位小数问题:

  • mysql中decimal数据类型小数位填充问题详解

    前言 在开发过程中,我们往往会用到decimal数据类型.因为decimal是MySQL中存在的精准数据类型. MySQL中的数据类型有:float,double等非精准数据类型和decimal这种精准. 区别:float,double等非精准类型,在DB中保存的是近似值. Decimal则以字符串的形式保存精确的原始数值. decimal介绍: decimal(a,b) 其中:a指定指定小数点左边和右边可以存储的十进制数字的最大个数,最大精度38.b指定小数点右边可以存储的十进制数字的最大个数

  • GO将mysql 中 decimal 数据类型映射到 protobuf的操作方法

    目录 protobuf中 float与double 1.如何在rpc中优雅取出dcemial类型 2.在rpc中 proto我们定义如下 2.1.proto - double 2.2.proto - float 3.在go-zero的sqlx中生成的model protobuf中 float与double 1.如何在rpc中优雅取出dcemial类型 例如我们在mysql中定义的一个字段如下: `discount` decimal(10,2) NOT NULL DEFAULT '0.00' CO

  • JS中检测数据类型的几种方式及优缺点小结

    1.typeof 用来检测数据类型的运算符 typeof value 返回值首先是一个字符串,其次里面包含了对应的数据类型,例如:"number"."string"."boolean"."undefined"."object"."function" 局限性: 1)typeof null ->"object" 2)检测的不管是数组还是正则都返回的是"ob

  • 关于JS数据类型检测的多种方式总结

    目录 背景 判断数据类型的手段有哪些? 1. 用typeof判断基础数据类型: 2. 用instanceof判断对象数据类型 3. 用contructor属性 4. toString方法 5. 用Array.isArray判断数组 6.区分ArrayLike与Array 7.判断一个对象是否是纯对象(or普通对象) 8. NaN如何检测,Number.isNaN与isNaN有啥区别 9. 鸭式类型检测法 总结 背景 总所周知,js是一门动态的弱类型脚本语言,其采用动态的类型系统以及基于原型的继承

  • 在javaScript中检测数据类型的几种方式小结

    在用javaScript编程的过程中,我们经常会遇到这样一个问题,就是需要检测一个数据或变量的类型,那么在javaScript中给我们提供了哪些方法呢?网上流传的代码比比皆是,但是发现其中有些是有误的,索性我自己动手把每种方法用了一遍,今天我专门整理了下,以便以后查阅. 一.typeof  检测 typeof 是一个一元运算符,语法:typeof(运算数),运算数可以是任意类型.它的返回值是一个字符串,该字符串说明运算数的类型. // var arr = { name:"john"};

  • C#中Decimal类型截取保留N位小数并且不进行四舍五入操作

    一.问题描述 开发中,需要使Decimal类型数据保留小数点后的两位小数且不需要进行四舍五入操作,即直接截取小数点后面的两位小数即可.例如:1.245M --> 1.24,而不是1.25 使用Decimal.Round()方法可以实现保留Decimal类型数据小数点后的若干位小数,但是该方法会进行四舍五入操作,而不是直接截取.所以,该方法不可取,在网上搜寻一番也没有找到合适的方法,便自己实现了一个截取Decimal类型数据小数点后若干位的方法. 二.详细的实现代码 using System; n

随机推荐