C# 关键字之 decimal
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
和浮点型将导致编译错误。
可以 String.Format
方法,或通过 System.Console.Write 方法(它会调用 String.Format()
),对结果设置格式。 货币格式是使用标准货币格式字符串“C”或“c”指定的,如本文后面的第二个示例所示。
示例
下面的示例尝试添加 double 和 decimal
变量,这会导致编译器错误。
double dub = 9;
// The following line causes an error that reads "Operator '+' cannot be applied to
// operands of type 'double' and 'decimal'"
Console.WriteLine(dec + dub);
// You can fix the error by using explicit casting of either operand.
Console.WriteLine(dec + (decimal)dub);
Console.WriteLine((double)dec + dub);
其结果为以下错误:
Operator '+' cannot be applied to operands of type 'double' and 'decimal'
在此示例中,同一个表达式中混合使用了 decimal
和 int。 计算结果为 decimal
类型。
public class TestDecimal
{
static void Main()
{
decimal d = 9.1m;
int y = 3;
Console.WriteLine(d + y); // Result converted to decimal
}
}
示例
在此示例中,通过使用货币格式字符串来设置输出的格式。 请注意,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);
}
}
/* Output:
My amount = $1.00
Your amount = $9,999,999,999,999,999,999,999,999,999.00
*/
- 一样的代码、不一样的写法,JavaScript必知的简写技巧|附源代码
- 【死磕Java并发】-----J.U.C之读写锁:ReentrantReadWriteLock
- 数据库中间件 MyCAT源码分析——跨库两表Join
- iOS一种动态栅格布局方案
- 消息队列中间件 RocketMQ 源码分析 —— Message 存储
- 数据库中间件 MyCAT 源码解析 —— 分片结果合并(一)
- 数据库分库分表中间件 Sharding-JDBC 源码分析 —— SQL 路由(一)之分库分表配置
- 数据库分库分表中间件 Sharding-JDBC 源码分析 —— SQL 解析(六)之删除SQL
- 数据库[分库分表]中间件 Sharding-JDBC 源码分析 —— SQL 解析(五)之更新SQL解析
- ExtJs+WCF+LINQ实现分页Grid
- 数据库[分库分表]中间件 Sharding-JDBC 源码分析 —— SQL 解析(四)之插入SQL
- 基于sliverlight + wcf的web 文字版IM 示例
- 数据库中间件 Sharding-JDBC 源码分析 —— SQL 解析(三)之查询SQL
- zephir-(11)流程控制语句
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【每日一具16】来了!扫描图片批量漂白修正软件
- 实现一个 webpack loader 和 webpack plugin
- 万字长文带你走进 JavaScript 的世界
- windows中常见后门持久化方法总结
- Python3爬虫实战【点触验证码】 — 模拟登陆bilibili
- BOM 是个什么玩意!
- Educational Codeforces Round 81 (Rated for Div. 2) B - Infinite Prefixes
- python-利用python写一个购物小程序
- Java技巧收录一 那些你相见恨晚的快捷键和代码注释模板
- Educational Codeforces Round 81 (Rated for Div. 2) C.Obtain The String
- 深入了解 webpack 模块加载原理
- Java中的数字类解析(包括格式化数字、大数运算等等)
- 数据挖掘领域十大经典算法之—K-邻近算法/kNN(超详细附代码)
- 洛谷 P1019 单词接龙
- SpringBoot 将自制的Starter 发布到远程公服