一个double运算的问题 我的情况是这样的double d1 = 7918.2;double d2 = 0.48;double d3 = d1+d2 = 7918.6799999999994;为什么会出现那么长的小数位呢?愁死人了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用decimal就可以了,那个是精度问题,你介意的话就别用那个数据类型。 自从被 double 精度坑了之后, 现在是能不用 double就不用。 你想需要多长?decimal小数类型来自己取! Double test1 = 1000.0;Double test2 = 1000.12345;Double test3 = 1000.1289;Int test4 = 1000;string test5 = "1000";string test6 = "1000.12345";string test7 = "1000.1289"Convert.ToDouble(test1).ToString("0.00");//保留小数点后两位,结果为1000.00Convert.ToDouble(test2).ToString("0.00");//保留小数点后两位,结果为1000.12Convert.ToDouble(test3).ToString("0.00");//保留小数点后两位,结果为1000.13Convert.ToDouble(test4).ToString("0.00");//保留小数点后两位,结果为1000.00Convert.ToDouble(test5).ToString("0.00");//保留小数点后两位,结果为1000.00Convert.ToDouble(test6).ToString("0.00");//保留小数点后两位,结果为1000.12Convert.ToDouble(test7).ToString("0.00");//保留小数点后两位,结果为1000.13 double的精度是不是很不稳定啊,同样的写法,我在控制台项目中测试就没问题,在我开发的一个项目中,就出现问题了,很奇怪 不要用double做加法,你可以看一下MSDN上的一个例子:using System;public class Example{ public static void Main() { Double value = .1; Double result1 = value * 10; Double result2 = 0; for (int ctr = 1; ctr <= 10; ctr++) result2 += value; Console.WriteLine(".1 * 10: {0:R}", result1); Console.WriteLine(".1 Added 10 times: {0:R}", result2); }}// The example displays the following output:// .1 * 10: 1// .1 Added 10 times: 0.99999999999999989换用Decimal吧 谢谢大家,问题解决了,改用decimal了 VS2008/VS2010 IDE 中如何用正则进行代码块替换 C#中的Rank函数是什么意思?! VS里创建项目时出错:Automation服务器不能创建对象,是什么原因啊??急。。 看了很多新手提问,发现很多人不用断点找问题的?为什么? c#连sybase VS下不同数据库之间读写 [求助]水晶报表的问题(急 在线等) WinFrom 中图片透明问题 如何才能得到HtmlTable表格中某行某列的值! C#输入字符串的格式不正确 关于DirectoryInfo.MoveTo和File.CopyTo的疑问?异步还是同步。 关于在C#中声明一个COM接口的问题
Double test2 = 1000.12345;
Double test3 = 1000.1289;
Int test4 = 1000;
string test5 = "1000";
string test6 = "1000.12345";
string test7 = "1000.1289"Convert.ToDouble(test1).ToString("0.00");//保留小数点后两位,结果为1000.00
Convert.ToDouble(test2).ToString("0.00");//保留小数点后两位,结果为1000.12
Convert.ToDouble(test3).ToString("0.00");//保留小数点后两位,结果为1000.13
Convert.ToDouble(test4).ToString("0.00");//保留小数点后两位,结果为1000.00
Convert.ToDouble(test5).ToString("0.00");//保留小数点后两位,结果为1000.00
Convert.ToDouble(test6).ToString("0.00");//保留小数点后两位,结果为1000.12
Convert.ToDouble(test7).ToString("0.00");//保留小数点后两位,结果为1000.13
double的精度是不是很不稳定啊,同样的写法,我在控制台项目中测试就没问题,在我开发的一个项目中,就出现问题了,很奇怪
{
public static void Main()
{
Double value = .1;
Double result1 = value * 10;
Double result2 = 0;
for (int ctr = 1; ctr <= 10; ctr++)
result2 += value; Console.WriteLine(".1 * 10: {0:R}", result1);
Console.WriteLine(".1 Added 10 times: {0:R}", result2);
}
}
// The example displays the following output:
// .1 * 10: 1
// .1 Added 10 times: 0.99999999999999989
换用Decimal吧
谢谢大家,问题解决了,改用decimal了