除以0.9 c#总是返回0

时间:2014-01-21 15:14:09

标签: c# math

我正在尝试做一个简单的数学picee,如果值在两个值之间,我会计算出来,如果是,它确实如此,它应该做一个简单的除法。但是有时候除以的值就像0.9,0.6等,并且总是返回0。

在这个例子中,

int m_LocationSqrMtr = 4339;
float m_DefaultPricing = Convert.ToSingle(DefaultPricing);
float m_manDays;

if (m_LocationCosts > 450 && m_LocationCosts < 700)
{
    m_DefaultPricing = 700 / m_LocationSqrMtr;    
}

4 个答案:

答案 0 :(得分:9)

我的猜测是m_LocationSqrMtr的类型是int,在这种情况下这个表达式:

700 / m_LocationSqrMtr

...将使用整数算法计算,结果转换为float。我怀疑你想要:

if (m_LocationCosts > 450 && m_LocationCosts < 700)
{
    m_DefaultPricing = 700f / m_LocationSqrMtr;    
}

字面上的f后缀表示它是float字面值,因此首先将m_LocationSqrMtr提升为float,然后使用{{1}执行除法算术。

但是,如果这意味着代表货币值,则应考虑使用float而不是decimal - 然后可能将值舍入为2位小数。如果您在float中执行所有货币算术运算,则不太可能遇到意外结果......

答案 1 :(得分:3)

你有:

int m_LocationSqrMtr = 4339;
[...]
m_DefaultPricing = 700 / m_LocationSqrMtr;    

700 / 4339,即(integer) / (integer),其结果为整数。

我知道你期待得到0.16132...的答案。

但就整数而言,该值为 ZERO

答案 2 :(得分:0)

如果m_LocationSqrMtr的类型为int,如32位整数,那么表达式

700 / m_LocationSqrMtr

是一个整数除以另一个整数,它的类型是整数。只有在生成此整数后才会将结果分配给float m_DefaultPricing,因此基本上您的代码等同于:

int temp = 700 / m_LocationSqrMtr;  
m_DefaultPricing = (float) temp;

如果要强制浮点运算,则至少有一个操作数需要是浮点数。有很多方法可以做到这一点:

m_DefaultPricing = 700.0 / m_LocationSqrMtr; //explicit decimal point

m_DefaultPricing = 700f / m_LocationSqrMtr; //explicit float specification

m_DefaultPricing = (float)700 / m_LocationSqrMtr;  //casting one operand
m_DefaultPricing = 700f / (float)m_LocationSqrMtr; //into a float

答案 3 :(得分:0)

在概念层面上已经有很多很好的实际答案:

在C#中,如果运算符的两边都是整数,则结果也是整数,并且任何十进制数字都会被截断。通常,对于数学,语言将生成与具有最精确类型的输入相同类型的结果。存储结果的变量类型不会仅对输入的类型产生影响。

通过强制一个输入为十进制或浮点数,您也可以强制输出。在实践中,您可以通过将您的输入变量之一声明为十进制或浮点数(取决于您使用哪个,在您的情况下您将更改m_LocationSqrMtr的类型)或者如果您有一个常量输入(就像您这样做)你可以将它强制为十进制/浮点数/双精度,如下所示:

var a = 10f // float
var b = 10d // double
var c = 10m // decimal
var d = 10.0 // double I believe