
[英]C# compiler error: “cannot have instance field initializers in structs”
[英]I need a alternative to using a field initialize in a struct C# (Cannot have instance field initializers in structs)
基本上,我理解为什么我在这里遇到错误,但是,我不确定要怎么做,这是我的代码:
public struct CashAmount
{
public int leftNumberExact, decimalNumberExact;
public string CashAmountExact = leftNumberExact + "." + decimalNumberExact;
public float CashAmountApprox = float.Parese(CashAmountExact);
}
基本上,我试图使数据类型具有像int一样精确的精度,但也具有小数。 无论我为什么不使用ulong或double或某种其他形式的浮点精度,它都必须绝对精确。
此代码应执行您想要的操作。 您仍然需要初始化'leftNumberExact'
和'decimalNumberExact'
,但其他属性将'decimalNumberExact'
:
public struct CashAmount
{
public int leftNumberExact, decimalNumberExact;
public string CashAmountExact
{
get:
{
return leftNumberExact + "." + decimalNumberExact;
}
}
public decimal CashAmountApprox
{
get:
{
return decimal.Parse(CashAmountExact);
}
}
}
如您所见,我仅使用getter将字段设置为属性。
我还更改为'decimal'
类型,应该完全准确。
如果约束实际上是“无论如何都必须绝对精确”,那么您应该使用强制执行这些约束的东西,例如github上的peteroupc的Numbers库。
如果结果不准确,则返回NaN,因为该结果将具有无终止的十进制扩展。
例如,这意味着1/3 == NaN:
EDecimal.One.Divide(3) == NaN
总的来说,我认为这是过于严格的限制,您最好使用一个理智而直观的库,例如GMPLib的包装器(GNU多精度库),或者使用许多其他可用的库: 一 两个 。
如果您打算自己实现某些功能,那么至少要签出其他库,因为最终会得到类似于或基于BigInteger的功能 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.