C#中的decimal类型及用法
decimal(C#)
decimal 关键字指示 128 位数据类型。 与浮点型相比,decimal 类型具有更高的精度和更小的范围,这使它适合于财务和货币计算。decimal 类型的大致范围和精度如下所示。
类型 | 大致范围 | 精度 | .NET Framework 类型 |
decimal | (-7.9 x 1028 - 7.9 x 1028) / (100 - 28) | 28-29 个有效位 | System.Decimal |
如果希望实数被视为 decimal 类型,请使用后缀 m 或 M,例如:
decimal myMoney = 300.5m;
如果没有后缀 m,则数字将被视为 double 类型并会生成编译器错误。
整型将被隐式转换为 decimal 类型,其计算结果为decimal。 因此,可以使用整数文本初始化十进制变量而不使用后缀,如下所示:
decimal myMoney = 300;
在浮点型和 decimal 类型之间不存在隐式转换;因此,必须使用强制转换以在这两个类型之间转换。例如:
decimal myMoney = 99.9m;
double x = (double)myMoney;
myMoney = (decimal)x;
还可以在同一表达式中混合使用 decimal 和数值整型。但是,不进行强制转换就混合使用 decimal 和浮点型将导致编译错误。
下面的示例尝试添加double 和decimal 变量,这会导致编译器错误。
double dub = 9;
Console.WriteLine(dec + dub); // error:"+"运算符不能用于连接decimal和double类型
Console.WriteLine(dec + (decimal)dub); //正确
Console.WriteLine((double)dec + dub); // 正确
在下面的示例中,同一个表达式中混合使用了decimal 和 int。计算结果为 decimal 类型。没有问题
publicclass TestDecimal
{
static void Main()
{
decimal d = 9.1m;
int y = 3;
Console.WriteLine(d + y);// 结果会被隐式转换为decimal类型
}
}
// 输出12.1
设置十进制输出的格式
可以通过使用 String.Format 方法或Console.Write 方法(其调用String.Format())来设置结果的格式。 货币格式是使用标准货币格式字符串“C”或“c”指定的,如下示例所示:
在此示例中,通过使用货币格式字符串来设置输出的格式。请注意,x 被舍入,因为其小数位数超出了 $0.99。表示最大精确位数的变量 y 严格按照正确的格式显示。
public class TestDecimalFormat
{
static void Main()
{
decimal x = 0.999m;
decimal y = 9999999999999999999999999999m;
Console.WriteLine("My amount = {0:C}", x);
Console.WriteLine("Your amount = {0:C}", y);
}
} /*
输出:
My amount = $1.00
Your amount = $9,999,999,999,999,999,999,999,999,999.00
*/
------------------------------------------------
C#中decimal的用法
decimal拥有比float更高的精度,最高能处理到小数点后面的28位。适合用在财务类等对数字精确度要求比较高的场合。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace cxx
{
class test
{
static void Main(string[] args)
{
decimal price;
decimal discount;
decimal discount_price;
//注意:必须要带“m”,否则将和标准的浮点类型一样。而我们要求的却是
//用来计算货币类的浮点数,但是可以给其赋整数值。
// decimal 对小数的运算更加的准确。
price = 19.95m;
discount = 0.15m;
//discount rate is 15%
discount_price = price - (price * discount);
Console.WriteLine("Discounted price :$ " + discount_price);
Console.ReadKey();
}
}
}
结果: