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);
}