2011-03-08 47 views
1

在.NET中,当我从1.35072减去1.35时,显示.000719999999。如何在使用double时获得.00072?.NET使用双打时的麻烦

TOTKILO.Text = KILO.Text * TOUCH.Text * 0.01; //here 1.35072 
TextBox10.Text = TextBox9.Text * TextBox8.Text * 0.01; //here 1.35 
K = Val(TOTKILO.Text) - Val(TextBox10.Text); //here it shows 0.00719999 
+2

你提的问题是非常不清楚 - 请你可以尝试和编辑您的问题,使其更易于理解什么是你正在尝试做的,你有什么用的问题。 – Justin 2011-03-08 04:12:51

+0

噢,上帝,我的眼睛:( – 2011-03-08 04:16:05

+8

@eldarerathis你应该得到一枚奖牌或什么! – Justin 2011-03-08 04:34:37

回答

5

取决于你真正要求的。

如果要舍入到小数点后五位,你可以这样做:

double x = 1.35072; 
double y = 1.35; 
double z = Math.Round(x - y, 5); // 0.00072 

如果,另一方面,你的目标是要始终从加/减十进制数得到精确的结果,使用decimal类型,而不是double,因为它本质上是一个碱-10型(相对于碱-2型),因此可以表示在小数形式精确地表示编号。

decimal x = 1.35072M; 
decimal y = 1.35M; 
decimal z = x - y; // 0.00072M 
0

从我所看到的,你几乎从不需要double。几乎所有的时间一个decimalSystem.Decimal)适用于你需要的,它是一个确切的数字,而不是一个浮点表示,所以你永远不会有这些舍入问题。

+0

从来没有四舍五入问题,所以'1M!? - (1M/3M)'会给我一个确切的结果吗?(只是给你一个难的时间;)) – 2011-03-08 04:38:04