public static explicit operator Currency(float value)
              {
                  uint dollars = (uint)value;   //value is 5.35,dollars is 5
                  ushort cents = (ushort)((value - dollars) * 100); //value is not change, but cents is 34 after explicit convert to ushort.
                  return new Currency(dollars, cents);
              }主函数中.Currency balance = new Currency(50,35);
              
              Console.WriteLine(balance);
              Console.WriteLine("balance is " + balance);
              Console.WriteLine("balance is (using ToString()) " + balance.ToString());
              
              float balance2= balance;
              
              Console.WriteLine("After converting to float, = " + balance2);
              
              balance = (Currency) balance2;
              
              Console.WriteLine("After converting back to Currency, = " + balance);

解决方案 »

  1.   

    代码, 在Main中注意看 第 11 行就行了....也就是说..当调用方法的时候...我上面的第一段代码...
    public static explicit operator Currency(float value)
                  {
                      uint dollars = (uint)value;   //value is 5.35,dollars is 5
                      ushort cents = (ushort)((value - dollars) * 100); //value is not change, but cents is 34 after explicit convert to ushort.
                      return new Currency(dollars, cents);
                  }高级编程是这样解释的...
    在转为 uint 的时候,就被截取了...是略小于 0.35的数... 是这样么...因为单单不知道的人来说...就如,我调试的时候,发现这里的 dollars(运算符重装方法中)是显示 0.35的..在 cent的时候才变成 0.34....我总以为是转换为 ushort时才变...
      

  2.   

    float精度不高,肯定会导致很多问题,用double问题就少很多,如果用Decimal就完美了,
      

  3.   

    这句你没用四舍五入,自然会出现你说的问题:ushort cents = (ushort)((value - dollars) * 100);如果你改为:ushort cents = (ushort)((value - dollars) * 100+0.5f);就会是0.35,
      

  4.   

    float和double容易引起精度丢失。例如0.05+0.01,可能答案不是0.06而是0.06000000000005什么的。如果想要完全精确的数字,请使用BigDecimal(java里是这个,c#中应该是上面那位朋友说的Decimal。)