首页 > 编程语言 >C#的数据类型总结:decimal ,double,float的区别

C#的数据类型总结:decimal ,double,float的区别

时间:2024-01-19 18:22:35浏览次数:39  
标签:C# double decimal float 数据类型 浮点 浮点数 精度

原文链接:https://www.cnblogs.com/mrbug/p/6904039.html

double虽然64位,但其精度低,故其可以表示的范围大
decimal虽然是128位,但由于其用了较多的位来表示其精度,只好牺牲表示范围了.

1> 三者是精度不同的浮点数,如下图

参见:https://docs.microsoft.com/zh-cn/dotnet/articles/csharp/language-reference/keywords/float

 

2> 写法

 默认情况下,赋值运算符右侧的实数被视为 double。 但是,如果希望整数被视为 double,可使用后缀 d 或 D,例如:

1 double d = 3D; 

若要初始化浮点型变量,请使用后缀 f 或 F,如以下示例中所示:

1 float f = 17.5F; 

如果希望实数被视为 decimal 类型,请使用后缀 m 或 M,例如:

1 decimal m = 17.5m;

3>关于它们的错误认识

 在精确计算中使用浮点数是非常危险的,尽管C#在浮点数运算时采取了很多措施使得浮点数运算的结果看起来是非常正常的。但实际上如果不清楚浮点数的特性而贸然使用的话,将造成非常严重的隐患。

 1、decimal不是浮点型、decimal不存在精度损失。
 下面有段程序大家可以去看看结果是什么。记住!所有的浮点型变量都存在精度损失的问题,而decimal是一个不折不扣的浮点型,不论它精度有多高,精度损失依然存在!  

1 2 3 decimal   dd   =   10000000000000000000000000000m;  dd   +=   0.1m;  Console.WriteLine   (   "{0:G50}",   dd   );  

 2、decimal所能储存的数比double大,从double到decimal的类型转换不会出现任何问题。

实际上只有从整形到decimal的转换才是扩大转换,decimal的精度比double大,但所能储存的最大数却比double要小。decimal类型具有更高的精度和更小的范围,这使它适合于财务和货币计算。

标签:C#,double,decimal,float,数据类型,浮点,浮点数,精度
From: https://www.cnblogs.com/Dongmy/p/17975326

相关文章

  • springmvc与ajax相互调用, 2.springmvc中如何拦截get请求
    通过JACKson框架可以把java里面的对象转化成js可以识别的json对象。具体步骤:1.加入Jack.jar2.在配置文件配置json映射3.在接受ajax方法里面一颗直接返回OBject,list等,但方法加@ResponseBody注解。  @RequestMapping注解中加上method=RequestMethod.GET参数就可以实现拦......
  • 布局控件:Grid和StackPanel
    布局控件:Grid和StackPanel本文同时为b站WPF课程的笔记,相关示例代码一个窗口顶上的部分叫做非客户区,下面的部分叫做客户区域。非客户区域主要就是一个Title和三个窗口样式按钮。我们主要学习修改客户区域。Grid直接在<Window>标签下当然也是可以直接写元素的,但是只能写一个。......
  • ceshipng
    Learning03CryptoTools.png Learning03Loader.png Learning03ExecuteLoader.png shell02.png ......
  • Contest3376 - 2024寒假集训-排位赛竞赛(一)
    A:幂位和高精度。用高精度加法或乘法算出\(2^{1000}\),再将各位累加即为答案。#include<bits/stdc++.h>usingnamespacestd;#definecctieios::sync_with_stdio(0);cin.tie(0);cout.tie(0)stringAP_add(stringA,stringB)//高精度加法{intlena=A.size()......
  • python导出、导入csv
    包是python自带的不用单独安装依赖包#coding=utf-8importcsv#导出csv文件#filePath例如C:\Users\yc\Desktop\1\output.csvdefexportCsv(filePath):#打开文件file=open(filePath,'w',newline='')#写入数据writer=csv.writer(file)writ......
  • C++中对象作为函数参数进行传参
    在C++语言环境中,对象是类的一个实例。 有三种方式:1、直接使用对象作为函数参数,形参和实参是不同的对象,它们所占地址空间不同,因此形参的改变并不影响实参的值。2、传入指向对象的指针作为函数参数,所谓“传址调用”,就是在函数调用时使用实参对象的地址,形参和实参都指向同一个地......
  • azul zule jdk(jvm) 8 support g1gc
    [WhichGarbageCollectorsareavailableinaparticularAzulZuluversion?–Azul](https://support.azul.com/hc/en-us/articles/360057827811-Which-Garbage-Collectors-are-available-in-a-particular-Azul-Zulu-version-) zulujdk8javaoptions*[Command-Line......
  • 华为交换机修改console密码
     在BootROM下清除Console口密码登录后,修改Console口密码设备的BootROM提供了清除Console口密码的功能,可以在用户使用Console口登录的时候跳过密码检查。这样系统启动后除了不需要输入Console密码外,与正常启动相同,也会完成所有配置加载。设备启动后重新配置验证方式和Console......
  • CAN总线协议简介及其常见的应用领域
    CAN总线协议是一种串行通讯协议,主要用于汽车和工业自动化领域,实现了实时应用的需求。首先,CAN总线协议的基本概念包括报文、信息路由和位速率。在CAN系统中,总线上传输的信息以不同格式的报文发送,但长度有限。CAN总线的位速率根据系统的不同而不同。其次,CAN总线协议具有多主控制的特......
  • Nuxt——asyncData/fetch
    asyncData()asyncData方法会在组件(限于页面组件)每次加载之前被调用。它可以在服务端或路由更新之前被调用。在这个方法被调用的时候,第一个参数被设定为当前页面的上下文对象,你可以利用asyncData方法来获取数据,Nuxt.js会将asyncData返回的数据融合组件data方法返回的数据一......