.NET Decimal 类型截断和舍入行为
.NET Decimal type truncation and rounding behavior
.NET Framework Decimal 类型值 99999999999.999945999 截断为 99999999999.9999。
将十进制值增加到 99999999999.999946999 舍入到 100000000000。请解释该行为以及为什么发生舍入而不是截断?
为什么截断或舍入?什么不保留precision/scale99999999999.999945999或9999999999.999946999?
小数d1 =新小数(99999999999.999945999);
小数 d2 = 新小数 (99999999999.999946999);
.NET 框架版本:4.7.2
如果您不知道这种 Decimal 类型的行为,可能会出现严重的问题,包括在通过 SqlClient 持久保存到数据库时丢失分辨率。
你的问题很有道理。这是微软做出的选择。在以 Double 作为参数的 Decimal 构造函数中。
它使用最接近的舍入将值舍入到 15 位有效数字。
即使数字超过 15 位且最低有效位为零,也会这样做。如果你想了解更多。
.NET Framework Decimal 类型值 99999999999.999945999 截断为 99999999999.9999。
将十进制值增加到 99999999999.999946999 舍入到 100000000000。请解释该行为以及为什么发生舍入而不是截断?
为什么截断或舍入?什么不保留precision/scale99999999999.999945999或9999999999.999946999?
小数d1 =新小数(99999999999.999945999); 小数 d2 = 新小数 (99999999999.999946999);
.NET 框架版本:4.7.2
如果您不知道这种 Decimal 类型的行为,可能会出现严重的问题,包括在通过 SqlClient 持久保存到数据库时丢失分辨率。
你的问题很有道理。这是微软做出的选择。在以 Double 作为参数的 Decimal 构造函数中。
它使用最接近的舍入将值舍入到 15 位有效数字。 即使数字超过 15 位且最低有效位为零,也会这样做。如果你想了解更多。