检查双精度是否可以在没有余数的情况下除法
本文关键字:余数 情况下 除法 双精度 是否 检查 | 更新日期: 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.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)