在.NET中,十进制、浮点和双精度之间有什么区别?

什么时候有人会用这些?


当前回答

十进制结构严格适用于要求精确性的财务计算,这些计算相对不允许四舍五入。然而,小数不足以用于科学应用,原因如下:

由于所测量的物理问题或伪影的实际限制,在许多科学计算中,一定程度的精度损失是可以接受的。在金融领域,精度的损失是不可接受的。对于大多数操作,十进制比浮点运算和双精度运算慢得多,这主要是因为浮点运算是以二进制进行的,而十进制运算是以10为基数进行的(即浮点运算和双倍运算是由FPU硬件处理的,如MMX/SSE,而小数是在软件中计算的)。尽管十进制支持更多位数的精度,但它的值范围比双精度小得令人无法接受。因此,十进制不能用来表示许多科学价值。

其他回答

没有人提到

在默认设置中,Floats(System.Single)和doubles(System.Double)永远不会使用Decimal(System.Decimal)将始终使用溢出检查。

我是说

decimal myNumber = decimal.MaxValue;
myNumber += 1;

引发OverflowException。

但这些并不:

float myNumber = float.MaxValue;
myNumber += 1;

&

double myNumber = double.MaxValue;
myNumber += 1;

对于游戏和嵌入式系统等内存和性能都至关重要的应用程序,浮点运算通常是数字类型的选择,因为它速度更快,大小只有双倍运算的一半。整数曾经是首选的武器,但在现代处理器中,浮点性能已经超过了整数。十进制是正确的!

精度是主要区别。

浮点-7位(32位)

双-15-16位(64位)

十进制-28-29位有效数字(128位)

小数具有更高的精度,通常用于要求高精度的金融应用中。小数比双/浮点数慢得多(在某些测试中高达20倍)。

小数和浮点数/双数不能在没有掷骰的情况下进行比较,而浮点数和双数可以进行比较。小数也允许编码或尾随零。

float flt = 1F/3;
double dbl = 1D/3;
decimal dcm = 1M/3;
Console.WriteLine("float: {0} double: {1} decimal: {2}", flt, dbl, dcm);

结果:

float: 0.3333333  
double: 0.333333333333333  
decimal: 0.3333333333333333333333333333

浮动:

它是一个浮点二进制点类型变量。这意味着它以二进制形式表示数字。浮点是一种单精度32位(6-9位有效数字)数据类型。它主要用于图形库,因为对处理能力的要求非常高,也用于舍入误差不太重要的情况。

双倍:

它也是一个具有双精度和64位大小(15-17位有效数字)的浮点二进制点类型变量。Double可能是真实值最常用的数据类型,但金融应用程序和需要高精度的地方除外。

十进制的:

它是一个浮点型变量。这意味着它使用十进制数字(0-9)表示数字。它使用128位(28-29位有效数字)来存储和表示数据。因此,它比浮点和双精度更高。由于它们的高精度和易于避免舍入误差,它们主要用于金融应用。

例子:

using System;
  
public class GFG {
  
    static public void Main()
    {
  
        double d = 0.42e2;    //double data type
        Console.WriteLine(d); // output 42
  
        float f = 134.45E-2f;  //float data type
        Console.WriteLine(f); // output: 1.3445
  
        decimal m = 1.5E6m;   //decimal data type
        Console.WriteLine(m); // output: 1500000
    }
}

浮点、双精度和十进制之间的比较基于:

使用的位数:

浮点使用32位表示数据。Double使用64位表示数据。十进制使用128位表示数据。

数值范围:

浮动值范围约为±1.5e-45至±3.4e38。双倍值范围约为±5.0e-324至±1.7e308。十进制值的范围约为±1.0e-28至±7.9e28。

精度:

浮点以单精度表示数据。双精度表示数据。十进制比浮点和双精度更高。

准确度:

浮点运算不如双精度和小数精度高。双精度比浮点精度高,但比十进制精度低。十进制比浮点和双精度更精确。

简单地说:

Decimal、Double和Float变量类型在存储值的方式上有所不同。精度是主要区别(请注意,这不是唯一的区别),其中float是单精度(32位)浮点数据类型,double是双精度(64位)浮点类型,decimal是128位浮点数据类型。汇总表:

/==========================================================================================类型钻头达到近似范围/==========================================================================================浮动32位7位数-3.4×10^(38)到+3.4×10^双64 15-16位数字±5.0×10^(-324)至±1.7×10^十进制128 28-29有效数字±7.9 x 10^(28)或(1至10^(29)/==========================================================================================你可以在这里阅读更多,浮点,双精度和十进制。