本帖最后由 bdmh 于 2014-11-10 10:28:28 编辑

解决方案 »

  1.   

    string DoubleToString(double d)
    {
       string s=d.ToString("R");
       return s.Contains(".")?s:s+".0";
    }
      

  2.   

    double temp = 3.0;
    byte[] bytes = BitConverter.GetBytes(temp);
    double temp1 = BitConverter.ToDouble(bytes, 0);帮楼上做了下验证, temp1 是 3.0 
      

  3.   

    double不保存无效数字,或者用你的说法,原“样式”。如果需要,你可以用decimal类型,那个是牺牲效率保留样式的10.000.ToString()   // "10"
    10.000m.ToString()   //"10.000"
      

  4.   


                var val = 123.4568901234567d;
                const byte ARGS = 0xF5; //随意的0~255之间的数字
                Func<double, double> encryptProc = raw => BitConverter.ToDouble(
                    (from b in BitConverter.GetBytes(raw)select Convert.ToByte(b ^ ARGS)).ToArray(), 
                    0);
                var encryption = encryptProc(val);
                Console.WriteLine("原文:{0}\t密文:{1}", val, encryption);
                var decryption = encryptProc(encryption);
                Console.WriteLine(decryption);            
                Console.Read();与同一个数两次异或等于原数
      

  5.   

    没看出你到底想按什么规律显示
    你可以double.ToString("0.000");
    让它固定显示3位小数,或者double.ToString("F3");都行
    而如果是整数要保留一个.0,小数有多少位显示多少位
    double.ToString("0.0####");这样就可以了
      

  6.   

    难道你不是把double转byte数组然后加密,而是先转字符串,再加密??
      

  7.   

    +1要无损加密的话,转byte数组后加密byte数组。
    转字符串是一定会损失精度的
      

  8.   


                //double a = 100.0;
                double a = 100.123;
                string temp = a.ToString("F");
                string result = "";
                if (temp.Contains(".") && temp.Substring(temp.Length - 1) == "0")
                {
                    result = temp;
                }
                else
                {
                    result = string.Format("{0:G}", a);
                }
                Console.WriteLine(result);
      

  9.   


    想将前台将全部参数加密后和后台的加密结果做个对比,前台是安卓端的,java里面100.0 转 string后就是100.0
    c#里面会变成100然后加密的结果就不一样了~~其实2楼的方法简单处理下就可以了,
    1楼的方法也不错,不过牵扯到安卓端的加密方法也要做修改,有点麻烦~~
      

  10.   

    java没玩过
    话说,java里100.00000转string后还是100.00000?
    不对吧,java编译器不应该这么扯淡吧
    对于double型来说,难道100.0和100是不相等的,否则转string后就应该一样才对
      

  11.   

    +1要无损加密的话,转byte数组后加密byte数组。
    转字符串是一定会损失精度的
    这个倒没必要考虑,就是一个价格而已,不会有多少位的~~
      

  12.   


    100.00000转string后是100.0然后我会拼成a=100.0&b=...
    这种类型的字符串后在加密,前台传过来的是a=100.0&b=...,我这边是a=100&b=...,加密的结果当然会不一样~~
      

  13.   

    下面只是说a是double类型的数据:
    double a=10; 而你说的“10”,或者“10.000”只是一种显示的格式。想怎么显示出来,你是可以控制的,比如楼上出现的如:double.ToString("0.000")string.Format("{0:G}", a)等