C# 为什么我从MS Access数据库提取的十进制值中添加了零?
我最初问这个问题,但不得不单独问 为什么我从数据库中得到2.01000000这样的值,尽管我只存储十进制2.01?在我的数据库中,我看到它是2.01,而不是2.010000。MS Access中的字段是decimal类型,我将其本身存储为2.01。我像这样提取值:C# 为什么我从MS Access数据库提取的十进制值中添加了零?,c#,ms-access,decimal,datareader,C#,Ms Access,Decimal,Datareader,我最初问这个问题,但不得不单独问 为什么我从数据库中得到2.01000000这样的值,尽管我只存储十进制2.01?在我的数据库中,我看到它是2.01,而不是2.010000。MS Access中的字段是decimal类型,我将其本身存储为2.01。我像这样提取值: while(reader.Read()) Convert.ToDecimal(reader[i]); 我得到的值是210000000。为什么?是否有更好的方法从数据库中读取十进制值?我已经将字段的精度设置为28,比
while(reader.Read())
Convert.ToDecimal(reader[i]);
我得到的值是210000000。为什么?是否有更好的方法从数据库中读取十进制值?我已经将字段的精度设置为28,比例因子设置为18。一个小数点按设计存储这些额外的零。您可以通过将数字四舍五入到正确的精度来设置所需的精度级别:
myNumber = decimal.Round(myNumber, 2);
这会将十进制精度更改为2(并应用舍入)。与
系统相关。十进制
在内部对精度敏感,SQL的十进制
更是如此-它被指定为类型的一部分
18的刻度和28的精度意味着数据库中小数点后将有18个有效数字。(共28位精度,点后18位,点前10位)
哪个访问恰巧包含在它发送给DAO代码的表示中
在解析过程中,正好注意到十进制
因此你可以看到这一点
我个人认为这是一个缺陷;十进制应该将精度表示为显式属性,或者应该将其隐藏。也许有一些理由我想不出来,但我没有想到。嗯。我原以为它会是2.010000000000000000,零比2.01000000多得多。活到老学到老……你在
reader[i]
中获得的原始价值是什么?它是一根绳子吗?如果有,它有额外的数据吗?@JaredPar reader[i]是一个object@JonHanna的确是。。我只是用一些值演示了一下。@nawfal是的,但是它的运行时类型是什么?但是我怎么知道应该设置什么精度呢?有时我的值为2.01,有时为2.0000001。如何处理这个问题任何小数的比较仍然有效,2.010000将等于2.01。它是否持有任何数量的零并不成问题。十进制值甚至会占用内存中相同的存储量。如果要将值转换为字符串,则只需进行修剪('0')。