Visual studio 2013 VS 2013写入Access时丢失一个小数点

Visual studio 2013 VS 2013写入Access时丢失一个小数点,visual-studio-2013,decimal,ms-access-2013,Visual Studio 2013,Decimal,Ms Access 2013,我正在写一个十进制的变量到Access DB。计算值为1600.91。Access中的字段设置为:字段大小-小数、格式-固定、精度-12、小数位数-2、小数位数-2 但表中最后的数字是1600.90。即使我将变量硬编码为1600.91,Access也会显示1600.90。该列中的其他行正确显示两个小数 访问连接的设置如下所示: Public con As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.

我正在写一个十进制的变量到Access DB。计算值为1600.91。Access中的字段设置为:字段大小-小数、格式-固定、精度-12、小数位数-2、小数位数-2

但表中最后的数字是1600.90。即使我将变量硬编码为1600.91,Access也会显示1600.90。该列中的其他行正确显示两个小数

访问连接的设置如下所示:

Public con As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\SPJ_CRVM.accdb")

Public daAnswer As New OleDbDataAdapter("SELECT * FROM [answer]", con)
Public cbAnswer = New OleDbCommandBuilder(daAnswer)
Public dtAnswer As New DataTable
Public drAnswer As DataRow

cbAnswer.quoteprefix = "["
cbAnswer.quotesuffix = "]"
daAnswer.Fill(dtAnswer)

drAnswer = dtAnswer.NewRow()
Dim ldec_gmp as Decimal

ldec_gmp = Math.Round(NUM / PVP * 12 / M, 4, MidpointRounding.AwayFromZero)
drAnswer("guar_maturity_premium") = ldec_gmp
代码如下:

Public con As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\SPJ_CRVM.accdb")

Public daAnswer As New OleDbDataAdapter("SELECT * FROM [answer]", con)
Public cbAnswer = New OleDbCommandBuilder(daAnswer)
Public dtAnswer As New DataTable
Public drAnswer As DataRow

cbAnswer.quoteprefix = "["
cbAnswer.quotesuffix = "]"
daAnswer.Fill(dtAnswer)

drAnswer = dtAnswer.NewRow()
Dim ldec_gmp as Decimal

ldec_gmp = Math.Round(NUM / PVP * 12 / M, 4, MidpointRounding.AwayFromZero)
drAnswer("guar_maturity_premium") = ldec_gmp
在此处完成对Access的写入:

dtAnswer.Rows.Add(drAnswer)
daAnswer.Update(dtAnswer)
更新:

NUM和PVP都标注为十进制;M的维数为整数

在示例行中:

NUM=41506.813854184606481174528411

PVP=25.927068677092090950619294386

M=12

ldec_gmp=1600.9065,中点舍入。从零到4

ldec_gmp=1600.91,中点舍入。从零到2


我做错了什么?

已知数据类型Decimal有一些奇怪之处。请尝试将字段的数据类型更改为货币。您能否将您的问题包含一个示例来说明问题?特别是:(1)您使用的是OleDb还是Odbc?(2) 是否使用文字SQL命令执行更新。。。参数化查询。。。数据适配器更新?谢谢,戈尔。如果我漏掉了什么,请告诉我。看起来你已经四舍五入到小数点后4位了。计算值是否精确到1600.9100?如果不是,则在保存到小数位数较少的字段时,您可能会发现数字被截断(而不是四舍五入)。如果是,则此时设置为小数点后4位。它最初设置为2,在桌上给我1600.90分;然后我从零开始加上中点舍入,仍然是1600.90。四舍五入只是我最近的一次尝试。