zoukankan      html  css  js  c++  java
  • C#操作数字

    1.静态类Math

     Math里的方法舍入是用的比较多的吧,然后三角函数,学过数学的人基本对这个都很清楚的。

    2.BigInteger

    BigInteger结构体是.NetFramework4.0新增的特殊值类型,它位于System.Numerics.dll的System.Numerics命名空间中。它可以表示任意大的整数而不会丢失精度。

                    System.Numerics.BigInteger twentyfive = 25;
                    Console.WriteLine(twentyfive);
                    System.Numerics.BigInteger googol = System.Numerics.BigInteger.Pow(10, 100);//10的100次方
                    Console.WriteLine(googol.ToString());

    BigInteger重载了包括去余数(%)在内的所有算术运算符,还重载了顺序比较运算符。

    另一种创建Biginteger的方式是从字节进行创建。

                    System.Security.Cryptography.RandomNumberGenerator ran = System.Security.Cryptography.RandomNumberGenerator.Create();
                    byte[] bytes = new byte[32];
                    ran.GetBytes(bytes);
                    var bigNumber = new System.Numerics.BigInteger(bytes);
                    Console.WriteLine(bigNumber);

    3.Cmoplex

    Cmoplex结构体也是.NetFramework4.0新增的特殊值类型,它表示实部和虚部均为double类型的负数。

    1                 var c1 = new System.Numerics.Complex(2, 3.5);
    2                 Console.WriteLine(c1.Real);//实部
    3                 Console.WriteLine(c1.Imaginary);//虚部
    4                 Console.WriteLine(c1.Phase);//复数的相位
    5                 Console.WriteLine(c1.Magnitude);//复数的量值
    6                 Console.WriteLine(System.Numerics.Complex.Asin(c1));

    其实这个值类型,对数学好的人理解是比较容易的,而且用的话花样也会很多。

    4.Random

    Random类能够生成类型为byte、integer、或double的伪随机数序列。

    使用Random之前需要将其序列化,并可以传递一个可选的种子参数来初始化随机数序列。使用相同的种子(在相同的CLR版本下)一定会产生相同序列的数字。这个特性在重现过程中非常有用:

    1  Random r1 = new Random(1);
    2  Random r2 = new Random(1);
    3  Console.WriteLine(r1.Next(100) + "," + r1.Next(100));
    4  Console.WriteLine(r2.Next(100) + "," + r2.Next(100));

    若不需要重现性,那么创建Random时无需提供种子,此时将用当前系统时间来生成种子。

    由于系统时钟只有有限的粒度,因此两个创建时间非常接近(一般在10毫秒之内的)Random实例会产生相同值的序列。常用的方法是每当需要一个随机数时才序列化一个Random对象,而不是重用一个对象。声明单例的静态Random实例是一个不错的模式,但是在多线程环境下可能出现问题,因此Random对象并非线程安全的。

    如果对随机数有加密要求的话可以使用 System.Security.Cryptography.RandomNumberGenerator。Random的随机数加密效果并不好。

    1  System.Security.Cryptography.RandomNumberGenerator rand = System.Security.Cryptography.RandomNumberGenerator.Create();
    2  byte[] bytes2 = new byte[4];
    3  rand.GetBytes(bytes2);
    4 ar o = BitConverter.ToInt32(bytes2,0);
    5 Console.WriteLine(o);

    总结

    其实在System.Nuerics命名空间下很多都是能够操作数字的结构体,上述有两种就是在这个命名空间下的结构体。而一些静态类也能够实现对数字的操作,就如博客中说的两种,可能用的比较多的是Math。

  • 相关阅读:
    php图片水印添加,压缩,剪切的封装类
    使用观察者模式处理异常信息
    php中的错误级别
    php 递归函数的三种实现方式
    php利用递归函数实现无限级分类
    利用http协议发布博客园博文评论
    结合php ob函数理解缓冲机制
    php 正则表达式捕获组与非捕获组
    php 利用socket发送GET,POST请求
    php mysqli扩展之预处理
  • 原文地址:https://www.cnblogs.com/aqgy12138/p/12773142.html
Copyright © 2011-2022 走看看