日期:2014-05-18  浏览次数:20911 次

C# 数值精度问题
1)我想让4.56变成456,怎么搞?
我现在的方法是:(其中c是字符串“4.56”,b是字符串“2”)
double num = Convert.ToDouble(c);
  int weishu = Convert.ToInt32(b);
  num = num * Math.Pow(10, weishu);
发现不行:中断模式下调试发现在进行运算后,num值为455.9999999

怎样才能变成毫无问题的456呢??

2)同理,怎么让456毫无问题的变成4.56(同样刚开始也是只有字符串“4.56”和字符串“2”)

请教各位了

谢谢

------解决方案--------------------
double num = Math.Round(num * 10, 0) //4.56->456
double num = Math.Round(num /100 , 2)//456->4.56
------解决方案--------------------
4.56转换成string,去掉. 再转回数字类型。。。
------解决方案--------------------
方法有很多

C.Replace(".","")试试
------解决方案--------------------
直接乘以100就行。
或者转为字符串,然后去掉小数点,再转为int
------解决方案--------------------
。。。。


vb.net
cint(c*(10^b))

c#.net
Convert.ToInt32(c*(10^b))

试试我忘记C#是不是^了
------解决方案--------------------
用ToDecimal,这个能保证十进制位数准确
------解决方案--------------------
探讨
方法有很多

C.Replace(".","")试试

------解决方案--------------------
*100再取整
------解决方案--------------------
既然是字符串就不用转来转去的
c=c.Insert(c.Length - 2, ",");
探讨
引用:
方法有很多

C.Replace(".","")试试


正解!

------解决方案--------------------
探讨

用ToDecimal,这个能保证十进制位数准确


------解决方案--------------------
C# code

 Debug.WriteLine(cal1(4.565));

 private int cal1(double num)
        {
            return (int)Math.Floor(num * 100);
        }