说说C#的数学类,Math,浮点数(上)
说说C#的数学类,Math,浮点数
C#语言支持下图所看到的的数值类型,各自是整数,浮点数和小数
可能不是非常清楚,可是细致看看还是能看清楚的.
在一个C#程序中,整数(没有小数点的数)被觉得是一个int类型(除非其值大于最大的int值),依据数据值,该数据依次被视为uint,ling,ulong,带小数点的数被觉得是一个double值.这就是说(1.0).GetType()==typeof(double).
当中类型前面的字母’u’代表无符号的意思.由于无符号,所以u代表了数据是整数或0,不可能是负数.
检查整数溢出
考虑以下代码:
short s=32767;s+=1;
ushort us=0;us-=1;
在第一个情况下,一个有符号的数加1,经过其最大值,因为整数在内存中存储方式的原因,结果是-32768.
另外一种情况,一个无符号的数被减为小于0,结果将是65535.
这两个样例各自是上溢出和下溢出的情况,假设想避免这样的情况的发生,能够使用checkedkeyword:
short s=32767;
checked
{
s+=1;//将会产生一个上溢出
}
或者使用以下的编译器开关:
/checked+
默认编译器开关相应为:
/checked-
迄今为止,都在收执行时的整数向上或向下溢出检查,在默认情况下编译器会将编译时的向上和向下溢出标记为一个错误,而和你的编译器开关无关.
比如语句:short s=32767+1;这会产生一个编译时错误,由于在编译期间对加法进行求值.
比如以下这个案例;
const int i1=65536;
const int i2=65536;
int i3=i1*i2;
由于i1,i2都是const值,所以编译器在编译的时候会尝试对i3=i1*i2进行求值,并遇到一个向上溢出.所以会导致编译错误.
编译器开关不会覆盖这一行为,可是uncheckedkeyword能够覆盖这样的行为.
int i3=unchecked(i1*i2)能够正常通过编译.
小数类型
decimalkeyword表示128位数据类型.同浮点型相比,decimal类型具有更高的精度和更小的范围,这使它适合于財务和后比计算.decimal类型的大致范围和精度看上面的图.
它使用16字节(128位)存储每个值.128位被划分为96位整数位,一个符号位,一集一个能够在0-28之间变化的比例因子.在数学上,这个比例因子是一个10的负指数幂,表示数值中小数点位置的编号.
比如,假设一个小数定义等于12.34,那么这个数的存储方式是整数0x4D2(后1234),以及一个比例因子2.
仅仅要一个小数具有(或小于)28个有效数字以及(或小于)28个小数位置,decimal 数据类型就能够准确的存储它.对于浮点数而言,这是不成立的.\!假设定义一个float值等于12.34,那么它会被存储为0xC570A4(或12939428)除以0x100000(或1048576),这个值等于12.340000152587890625约等于12.34,即使将一个double值定义为12.34,他也是一个约等于12.34的数.
这就是你爱不想让美分神奇的出现和消失的地方运行计算时应该使用decimal的原因,由于浮点数不精确,浮点数据类型在科学和project应用方面非常合适,可是在金融应用不好使.
说说C#的数学类,Math,浮点数(上)的更多相关文章
- Java基础__Java中常用数学类Math那些事
测试 package Cynical_Gary; public class Cynical_Text { public static void main(String[] args){ System ...
- Java开发知识之Java的数字处理类Math类
Java开发知识之Java的数字处理类Math类 一丶Java.text.DecimalFormat类与NumberFormat类 首先 Java.text.DecimalFormat指的是Decim ...
- Java数学函数Math类
Java数学函数Math类常用: Math.abs(12.3); //12.3 返回这个数的绝对值 Math.abs(-12.3); //12.3 Math.copySign(1.23, -12.3) ...
- 数字(数学)操作类 Math Random 类 ,大数字操作类
Math 提供了大量的数学操作方法 Math类中所有的方法都是static 方法
- Math 数学类
/* Math 数学类, 主要是提供了很多的数学公式. abs(double a) 获取绝对值 ceil(double a) 向上取整 floor(double a) 向下取整 round(float ...
- Java基础学习笔记之:System类;Math类;Arrays类BigInteger,BigDecimal
System类 在API中System类介绍的比较简单,我们给出定义,System中代表程序所在系统,提供了对应的一些系统属性信息,和系统操作.System类不能手动创建对象,因为构造方法被priva ...
- Lua 数学类
数学类主要有Vec2(坐标向量).Size(尺寸).Rect(矩形). 创建 在Lua中创建的 Vec2.Size.Rect 都是一个table类型. 其中只有相应的成员变量,没有相关的函数运算. c ...
- 处理数字的类 —— Math类 、 Random类 、 BigDecimal类 与 BigInteger类
在我们学习C语言时,我们处理数据时要调用很多函数,那么,Java也有很多的方法可以来处理数值的类. 那么,在本篇博文中,本人就来讲解三个用于处理数值的类 -- Math类 . Random类 与 Bi ...
- Java:日历类、日期类、数学类、运行时类、随机类、系统类
一:Calendar类 java.util 抽象类Calendar 1.static Calendar getInstance()使用默认时区和语言环境获得一个日历. 2. int get(int ...
随机推荐
- Bringing up interface eth0: Determining if ip address 10.109.67.81 is already in use for device eth0...
重启网卡出现提示: Bringing up interface eth0: Determining if ip address 10.109.67.81 is already in use for ...
- maven编译生成的jar包运行出现 "Failed to load Main-Class manifest attribute from"
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- Delphi读写二进制文件
http://www.cnblogs.com/hnxxcxg/p/3691742.html 二进制文件(也叫类型文件),二进制文件是由一批同一类型的数据组成的一个数据序列,就是说一个具体的二进制文件只 ...
- background-position 用法介绍
转自:http://blog.csdn.net/jeamking/article/details/5617088 语法: background-position : length || lengt ...
- java 连接带 kerberos 验证的 phoenix
唉,网上的资料比较少,找了好久,压根不知道如入告诉 phoenix 客户端来使用 kerberos 啊.. 然后就想到了,这东西开源的应该有相关的单元测试吧..啊哈哈哈哈哈哈,果然 https://g ...
- 遇见requestAnimationFrame
今天,在读javascript异步编程的js事件深入理解部分的时候,了解到了requestAnimationFrame 这个api,在这里记录一下. 原文: setTimeout 和 setInter ...
- 9、Django实战第9天:用户注册功能
今天完成的是用户注册功能... 首先把注册页面的前端文件register.html复制到templates目录下 编辑users.views.py,创建一个注册的类 class RegisterVie ...
- 【树状数组】Gym - 101147J - Whistle's New Car
题意就是对每个点i,统计在其子树内(不含自身),且depj-depi<=xj的点有多少个. 把点分别按照dep-x和dep进行排序,离线处理, 每次把dep-x小于等于当前dep值的点插入树状数 ...
- 【暴力】UVALive - 4882 - Parenthesis
就不断地扫整个序列,如果发现多余的括号就删除.大概复杂度还是O(n²)左右.如何判断不合法请详见代码. To a computer, there is no difference between th ...
- 对三个数排序 Exercise06_05
import java.util.Scanner; /** * @author 冰樱梦 * 时间:2018年下半年 * 题目:对三个数排序 * */ public class Exercise06_0 ...