我需要检查我的双号是否可以在没有余数的情况下分成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)
但我认为还有另一种方式。
答案 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)