检查双重是否可以分开而没有余数

时间:2015-01-09 14:54:43

标签: c# .net

我需要检查我的双号是否可以在没有余数的情况下分成0.05。所以我这样做:

if (!double.TryParse(ProductPriceTextBox.Text, out price) || !(0 < price) || !(price%0.05==0.0))

问题是我的ProductPrice可以用0.05,0.1,0.2,0.5,1,2欧元的硬币组成。

因此,所有产品价格必须为:price%0.05==0,即:

1欧元,1.5欧元,0.5欧元 - 通过 1.21欧元,0.01欧元 - 失败。

但编译器提示我:

(price%0.05==0.0)
  

使用相等运算符比较浮点数。可能会失去预决定

无法弄清楚它失败的原因......

当然我可以这样做:

int priceInCents= price*100;
(priceInCents%5==0)

但我认为还有另一种方式。

3 个答案:

答案 0 :(得分:5)

您最好使用decimal数据类型,因为这更适合货币。 (double是一种浮点数据类型,对于货币而言并不好玩,因为它不准确)。

试试这个:     十进制价格;

if ( !decimal.TryParse(ProductPriceTextBox.Text, out price)
     || !(0 < price)
     || !(price % 0.05M == 0)
   )

答案 1 :(得分:1)

整数都更容易处理.....

if ((!double.TryParse(ProductPriceTextBox.Text, out price)
  || (price * 20.0 != Math.Floor(price * 20.0)) )
  {   // failure

答案 2 :(得分:-1)

将您的价格乘以100,将模数乘以5

!((price*100) % 5 == 0)