博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#中对于float,double,decimal的误解
阅读量:5757 次
发布时间:2019-06-18

本文共 944 字,大约阅读时间需要 3 分钟。

原文:

一直很奇怪C#的预定义数据类型中为什么加了一个decimal,有float和double不就够了吗?今天来挖一挖。

浮点型

如果我们在代码中写一个12.3,编译器会自动认为这个数是个double型。所以如果我们想指定12.3为float类型,那么你必须在数字后面加上F/f:
float f = 12.3F;

decimal类型

作为补充,decimal类型用来表示高精度的浮点数

对decimal、float、double错误的认识
引用自: 中Ivony的评论

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

   
  考虑下面的语句:  
   
              double   dd   =   10000000000000000000000d;  
              dd   +=   1;  
              Console.WriteLine   (   "{0:G50}",   dd   );  
   
  输出是什么?谁知道?  
  输出是:1000000000000000000000000  
   
  这就是浮点数精度损失的问题,最重要的是,在精度损失的时候,不会报告任何的错误,也不会有任何的异常产生。  
   
  浮点数的精度损失可能在很多地方出现,例如d   *   g   /   g   不一定等于d,d   /   g   *   g也不一定等于d。  
   
  还有两个非常危险的错误认识!!  
   
  1、decimal不是浮点型、decimal不存在精度损失。  
   
  下面有段程序大家可以去看看结果是什么。记住!所有的浮点型变量都存在精度损失的问题,而decimal是一个不折不扣的浮点型,不论它精度有多高,精度损失依然存在!  
   
                  decimal   dd   =   10000000000000000000000000000m;  
                  dd   +=   0.1m;  
                  Console.WriteLine   (   "{0:G50}",   dd   );  
   
  2、decimal所能储存的数比double大,从double到decimal的类型转换不会出现任何问题。  
   
  微软在decimal的帮助上真的要好好反省了。实际上只有从整形到decimal的转换才是扩大转换,decimal的精度比double大,但所能储存的最大数却比double要小。

本文来自CSDN博客,

转载地址:http://vmpkx.baihongyu.com/

你可能感兴趣的文章
android textView的渐入效果
查看>>
linux上安装fastdfs+nginx+ngin-module实践并解决多个异常篇
查看>>
迭代器和生成器
查看>>
设计模式之原型模式
查看>>
Unity用GUI绘制Debug/print窗口/控制台-打包后测试
查看>>
移动开发
查看>>
小P的故事——神奇的Dota 背包
查看>>
3G版iPad水货价普降最少200元 受新品发布冲击
查看>>
转载《“精”、“气”、“神”解》
查看>>
Tilera平台使用体会
查看>>
NSString 转 UTF-8 的符号匹配问题
查看>>
Mysql 连接错误之-caching_sha2_password
查看>>
C#3.0智能的编译器
查看>>
代码修改mac地址(需要root)
查看>>
oracle错误
查看>>
转:开火,移动-大神Joel 也浮躁
查看>>
Java微笔记(8)
查看>>
快速查找素数 http://acm.nyist.net/JudgeOnline/problem.php?pid=187
查看>>
深度数据对接 链接服务器 数据传输
查看>>
【解决方法】Ubuntu文本编辑器gedit打开中文出现乱码的
查看>>