由于double类型运算时常常出现一些问题,
如3.6+1.2-1.2 就等于 3.6
可是double类型常常出现 3.59999……4 之类的,于是我做了个d类,用来代替double,结果遇到这个问题d[] cc = new d[29];
当cc[2]==null时,引用cc[2]总是出错可是有一种情况,却完全相反
string aa=new string[29]
当aa[2]==null时,引用aa[2]总没有出错,这是为什么呢?
以下为类名
public class d
{
double dd;
public d()
{
dd = 0;
}
public d(double d)
{
double a = Math.Round(d, 3);
if (a == d)
this.dd = a;
else if (Math.Abs(a - d) * 1000000 < 1)
this.dd = a;
else
this.dd = d;
}
public double Value
{
set
{
dd = value;
}
get
{
if (this == null)
return 0;
if (dd==null)
return 0;
return dd;
}
}
public static implicit operator d(double d)
{
return new d(d);
}
public static implicit operator double(d d)
{
if (d == null)
{
return 0;
}
return d.dd;
}
public static implicit operator string(d d)
{
return d.dd.ToString();
}
public static d operator +(d d1, d d2)
{
return new d(d1.dd + d2.dd);
}
public static d operator -(d d1, d d2)
{
return new d(d1.dd - d2.dd);
}
public static d operator *(d d1, d d2)
{
return new d(d1.dd * d2.dd);
}
public static d operator /(d d1, d d2)
{
return new d(d1.dd / d2.dd);
}
}
如3.6+1.2-1.2 就等于 3.6
可是double类型常常出现 3.59999……4 之类的,于是我做了个d类,用来代替double,结果遇到这个问题d[] cc = new d[29];
当cc[2]==null时,引用cc[2]总是出错可是有一种情况,却完全相反
string aa=new string[29]
当aa[2]==null时,引用aa[2]总没有出错,这是为什么呢?
以下为类名
public class d
{
double dd;
public d()
{
dd = 0;
}
public d(double d)
{
double a = Math.Round(d, 3);
if (a == d)
this.dd = a;
else if (Math.Abs(a - d) * 1000000 < 1)
this.dd = a;
else
this.dd = d;
}
public double Value
{
set
{
dd = value;
}
get
{
if (this == null)
return 0;
if (dd==null)
return 0;
return dd;
}
}
public static implicit operator d(double d)
{
return new d(d);
}
public static implicit operator double(d d)
{
if (d == null)
{
return 0;
}
return d.dd;
}
public static implicit operator string(d d)
{
return d.dd.ToString();
}
public static d operator +(d d1, d d2)
{
return new d(d1.dd + d2.dd);
}
public static d operator -(d d1, d d2)
{
return new d(d1.dd - d2.dd);
}
public static d operator *(d d1, d d2)
{
return new d(d1.dd * d2.dd);
}
public static d operator /(d d1, d d2)
{
return new d(d1.dd / d2.dd);
}
}
if (this == null)
return 0;
如果在一个null的对象上调用Value属性的话,则本来就会报未将对象设置到对象的实例的错误了。
所以你的this==null永远不会执行的2、
if (dd==null)double 是值类型,dd永远不可能等于null 你的代码能编译通过吗????
如3.6+1.2-1.2 就等于 3.6
可是double类型常常出现 3.59999……4 之类的,这个怎么解决啊
double d = Math.PI;
Console.WriteLine(d.ToString("f2")); d = 3.5874144;
Console.WriteLine(d.ToString("f2"));
了解下IEEE754吧。
对于精度要求很高的应用,你可以保留很多的小数位。
但对于一个公司的财务报表来说,如150000.14,多数情况下保留一位就可以了,您会为4分钱去开除公司的财务吗?