我需要在结构C#中使用字段初始化的替代方法(结构中不能包含实例字段初始化器)

时间:2018-11-14 18:03:07

标签: c#

基本上,我理解为什么我在这里遇到错误,但是,我不确定要怎么做,这是我的代码:

await mongoose.connect("mongo://_myusername_:_password__")@cluster0-shard--00-00-neswb.mongodb.net:27017...

基本上,我正在尝试使数据类型具有与int一样的精确度,但也具有小数。无论我为什么不使用ulong或double或其他某种形式的浮点精度,它都必须绝对精确。

2 个答案:

答案 0 :(得分:0)

此代码应执行您想要的操作。您仍然需要初始化'leftNumberExact''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'类型,应该完全准确。

答案 1 :(得分:0)

如果约束实际上“无论如何都必须绝对精确”,那么您应该使用强制执行这些约束的东西,例如github上的peteroupc的Numbers库。

请参见EDecimal class,该规则强制执行此划分规则:

  

如果结果不准确,则返回NaN,因为该结果将具有无终止的十进制扩展。

例如,这意味着1/3 == NaN:

EDecimal.One.Divide(3) == NaN

总的来说,我认为这是过于严格的限制,您最好使用理智而直观的库,例如GMPLib的包装器(GNU多精度库)或任何其他可用的库:one two

如果您打算自己实现某些功能,则至少要签出其他库,因为最终您将获得类似于或基于BigInteger的功能。