decimal 吗?是这样吗?怎么还要加个Mdecimal v1 = 3.14M;
decimal v2 = 52.11M;
System.Math.Round(v1*v2,2);

解决方案 »

  1.   

    什么意思?必须用整型?这样呢,,结果好像是对的。。decimal v1 = 1.01M;
    decimal v2 = 2.33M;
    decimal v3 = Decimal.Multiply(v1,v2);
    TextBox1.Text = Convert.ToString(Math.Round(v3,2));
      

  2.   

    只要是浮点型就有可能存在数据损失,只有整型能保证精确运算。decimal是浮点型的。
      

  3.   

    Ivony() 说得整数 = 定点小数,
    我不太明白, 能否阐述一下。
      

  4.   

    用整型表示浮点型的例子:比如要计算 123.456 + 1234.999
    int i1 = 123;
    int i2 = 1234;
    int f1 = 456;
    int f2 = 999;int ri = i1 + i2;
    int fi = f1 + f2;
    if (fi > 999)
    {
        ri++;
        fi -= 1000;
    }这只是一个最简单的例子,但是原理都差不多
      

  5.   

    decimal 变量以 128 位(16 个字节)带符号的整数形式存储,并以 10 为幂值变比。比例因子指定小数点右面的数字位数,其范围为 0 到 28。小数位数为 0(没有小数位)时,最大的可能值为 +/-79,228,162,514,264,337,593,543,950,335。而在有 28 个小数位的情况下,最大值为 +/-7.9228162514264337593543950335,而最小的非零值为 +/-0.0000000000000000000000000001 (+/-1E-28)。
      

  6.   

    decimal其实是用整数表示小数,看作除以10的n次方而已
    128位二进制,表数范围远小于double,但精度大的多
      

  7.   

    decimal不过是存10的幂的浮点数,另外,精度非常大。整型可以作精确运算一般可以用下面的表达式说明:
    int i,j;i / j * j + i % j == i;//只要不溢出就是恒等。但浮点数通常不会有这个等式。
      

  8.   

    如果你说decimal是浮点数,你怎么解释decimal的表数范围小而精度大这一事实?
    上面我那一段是从MSDN抄的,你看过了吗?MSDN中虽然错误很多,但如果在这种原则性的问题上犯错误,那就太可笑了~
      

  9.   

    Decimal 值的二进制表示形式由 1 位符号、96 位整数以及比例因子组成,比例因子用作 96 位整数的除数并指定整数的哪一部分为小数。比例因子隐式地定为数字 10 的幂,指数范围从 0 到 28。因此,Decimal 值的二进制表示形式为:((-296 到 296) / 10(0 到 28)),其中 -296-1 等于 MinValue,而 296-1 等于 MaxValue。
      

  10.   

    作汇率用decimal 足够了,小数个数也足够实际中的使用
      

  11.   

    我一直认为微软写VS的帮助的时候,总是废话连篇不讲重点,如VS2003中对IDispose的说明。
      

  12.   

    Console.WriteLine( decimal.MaxValue );
          Console.WriteLine( decimal.MaxValue - 0.000000000000000000000000000001m );
          Console.WriteLine( decimal.MaxValue - 0.000000000000000000000000000001m == decimal.MaxValue );
      

  13.   

    忘了贴结果:79228162514264337593543950335
    79228162514264337593543950335
    True
      

  14.   

    至于定点数,如果不是有特别大的精度要求,直接用整数就行了,比如说定点两位小数。我一般不贴代码的……public struct MyNumber
    {
      private long _value;  private MyNumber( long value )
      {
        _value = value;
      }  //转换就根据需要自己写了。  //运算符可以重载几个,如下面写就行:  public static operator+ ( MyNumber num1, MyNumber num2 )
      {
        return new MyNumber( num1._value + num2._value );
      }  //最重要的是重载输出
      public override ToString()
      {
        return string.Format( "{0}.{1}", _value / 100, _value % 100 );
      }
    }