Decimal a=Convert.ToDecimal(textBox1.Text);
Decimal b=Math.Round(a,0);
if (b>a)
b=b-1;
Decimal c=a-b;
textBox2.Text=b.ToString ();
textBox3.Text=b.ToString ();
a为原来的部份。
b为整数部分。
c为小数部份。
俺就这么处理了。有那位同仁可以指出什么更方便的办法吗?

解决方案 »

  1.   

    我的方法不通过计算,完全没有误差 Double d=1.234;
    int b,c;
    string[] ss=new string[2];
    string s=d.ToString();
    //把这个数按照小数点分离到string数组
    ss=s.Split('.');
    b=int.Parse(ss[0]);
    c=int.Parse(ss[1]);
    Console.WriteLine(b);
    Console.WriteLine(c);
      

  2.   

    首先多谢rengo()茶凉() 的回复。
    其实字符串的计算比数字的计算更要消耗资源,而且还要转换好几次,我也曾想用字符串这么做,但因涉及的大量这样的重复计算,会很慢。后几分钟想想,我用的是Decimal 类形,只要精确到小数后四位,也没有误差的,速度也可以接受。是否有更快更简捷的算法吗?兄弟们~~
      

  3.   

    Decimal能有小数点吗,就算decimal也只能精确到小数点后一位,如果可以用浮点数,下面的方法应该比较简便:
    double c=d%1;
    double b=d-c;
      

  4.   


    Decimal是所有数中最长的128 位数据类型,double是64位数据类型.Decimal值最多精确到 28th 小数位数。另:求余是一个好方法,多谢您,但是是有误差的计算了。
    如:
    double a=1.06;
    double c=a%1;
    double b=a-c;
    c的返回值大概是
    0.0600000000000001
    ------------------
    Decimal=122.23M;
    Decimal b=Math.Round(a,0);
    if (b>a)
    b=b-1;
    Decimal c=a-b;
    这样结果是对了,但不知是否最优~
    ----------------附上MSDN帮助:decimal 类型是适合财务和货币计算的 128 位数据类型。decimal 类型可以表示具有 28 或 29 个有效位数、从 1.0 × 10?28 到大约 7.9 × 1028 范围内的值。decimal 类型的有限值集的形式为 s × m × 10e,其中 s 为 1 或 –1、0 ≤ m < 296 以及 ?28 ≤ e ≤ 0。decimal 类型不支持有符号的零、无穷大或 NaN。decimal 表示为以 10 的幂计算的 96 位整数。对于绝对值小于 1.0m 的 decimal,值最多精确到 28th 小数位数。对于绝对值大于或等于 1.0m 的 decimal,值精确到 28 或 29 位数。
      

  5.   

    我想Math.Round肯定不是省油的灯,其实怎么都可以,也不会在乎那一点点速度吧
      

  6.   

    我觉得不用那么麻烦吧int b =Convert.ToInt16(a-0.5M)可以得到其整数值
    c=a-b取余数
    有什么不好吗?
      

  7.   

    decimal a = 6.75;
    string[] ss  = a.ToString().Split('.');
    ss[0] = 6;
    ss[1] = 75;知道这两个值了,你该知道如何去得到数值型的值了吧~~~
      

  8.   

    多谢上面rengo()茶凉() 、powerpower(pow) 的回应和讨论:
    rengo()茶凉()的思路不错
    好象int b =Convert.ToInt16(a-0.5M)这个算法最简捷了吧,大家同意吗?Happyboy_zjy(阳光男孩) 你也不看看前面大家的讨论你的想法“地球人都知道呀”~
    好啦,到此我想也应散分了,多谢各位的参与.
      

  9.   

    int b =Convert.ToInt16(a-0.4M)才是最正确的!!因为是五舍六进位的.