在.NET中,decimalfloatdouble之间有什么区别?

什么时候会有人用这些?

推荐答案

floatdoublefloating binary point types.换句话说,它们代表这样一个数字:

10001.10010110011

二进制数和二进制点的位置都编码在该值内.

decimalfloating decimal point type.换句话说,它们代表这样一个数字:

12345.65789

同样,decimal点的数字和位置都在该值中进行了编码,这使得decimal仍然是浮点类型,而不是定点类型.

需要注意的重要一点是,人类习惯于用十进制形式表示非整数,并期望用十进制数表示精确的结果;并不是所有的十进制数都可以精确地用二进制浮点表示(例如0.1),所以如果使用二进制浮点值,实际上会得到0.1的近似值.当使用浮动小数点时,您仍然会得到近似值-例如,1除以3的结果不能精确表示.

至于在以下情况下使用什么:

  • 对于"自然精确小数"的值,最好使用decimal.这通常适用于人类发明的任何概念:金融价值是最明显的例子,但也有其他例子.例如,考虑到潜水员或溜冰运动员的得分.

  • 对于那些更像是自然产物的价值,无论如何也无法真正测量exactlyfloat/double更合适.例如,科学数据通常以这种形式表示.在这里,原始值从一开始就不是"小数精度",因此保持"小数精度"对预期结果并不重要.使用浮点二进制类型比使用小数要快得多.

.net相关问答推荐

SLN配置文件:映射问题

如何将 select 语句详细信息提取到不同的方法中仍然保持Eager 加载?

.NET 7.0中的UseHttpsRedirection和IIS生产部署

如何手动注入依赖注入

CurrentCulture、InvariantCulture、CurrentUICulture 和 InstalledUICulture 之间的区别

.NET 的future 版本会支持 C# 中的元组吗?

为什么 Any() 不适用于 c# null 对象

我可以从我的应用程序中抛出哪些内置 .NET 异常?

我可以从 .NET/C# 获取其他进程的命令行参数吗?

是什么让 Enum.HasFlag 这么慢?

如何以编程方式 Select ListView 中的项目?

我应该从 .NET 中的 Exception 或 ApplicationException 派生自定义异常吗?

读取方法的属性值

如何判断对象是否是某种类型的数组?

String.Format - 它是如何工作的以及如何实现自定义格式字符串

在 .NET 中获取默认打印机的最佳方法是什么

从流中获取 TextReader?

序列化一个可为空的 int

没有科学记数法的双精度字符串转换

C#/.NET 中仅命名空间的类可见性?