下面的程序使用 gcc 编译和运行时没有警告: 42 42 x主要在其初始化期间使用。 这对于.a由大表达式初始化的情况非常方便。 这是 C++ 中的合法表达式吗,我能保证总是得到正确的答案吗? ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
基本上,我理解为什么我在这里遇到错误,但是,我不确定要怎么做,这是我的代码:
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.