Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我从MS Access数据库提取的十进制值中添加了零?_C#_Ms Access_Decimal_Datareader - Fatal编程技术网

C# 为什么我从MS Access数据库提取的十进制值中添加了零?

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,比

我最初问这个问题,但不得不单独问

为什么我从数据库中得到2.01000000这样的值,尽管我只存储十进制2.01?在我的数据库中,我看到它是2.01,而不是2.010000。MS Access中的字段是decimal类型,我将其本身存储为2.01。我像这样提取值:

 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')。