检查双精度是否可以在没有余数的情况下除法

本文关键字:余数 情况下 除法 双精度 是否 检查 | 更新日期: 2023-09-27 18:37:06

我需要检查我的双精度数是否可以除以 0.05 而没有余数。所以我正在这样做:

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

问题是我的产品价格可以由 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)

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

检查双精度是否可以在没有余数的情况下除法

您最好使用 decimal 数据类型,因为这更适合货币。(double是一种浮点数据类型,这对于货币来说并不有趣,因为它不精确)。

试试这个: 十进制价格;

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

更容易处理.....

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

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

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