数据类型的问题(在线等)

zq32206124 2009-06-07 10:31:02
  int OrdersDetailID = 463;
decimal NormProcessCost = (decimal)51.1;
decimal NormPrice = (decimal)60.94;
float NormScaleModel = (float)-75.59;
string ConnectionString = "server=192.168.1.127;uid=sa;pwd=123456;database=Data";
SqlConnection myConnection = new SqlConnection(ConnectionString); //定义数据库的Connection and Command
SqlCommand myCommand = new SqlCommand("[Sales].[Update_OrdersDetail_Norm]", myConnection); //定义使用的存储过程名称
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.Parameters.Add(new SqlParameter("@OrdersDetailID", SqlDbType.Int));
myCommand.Parameters["@OrdersDetailID"].Value = OrdersDetailID;
myCommand.Parameters.Add(new SqlParameter("@NormProcessCost", SqlDbType.Decimal));
myCommand.Parameters["@NormProcessCost"].Value = NormProcessCost;
myCommand.Parameters.Add(new SqlParameter("@NormPrice", SqlDbType.Decimal));
myCommand.Parameters["@NormPrice"].Value = NormPrice;
myCommand.Parameters.Add(new SqlParameter("@NormScaleModel", SqlDbType.Float));
myCommand.Parameters["@NormScaleModel"].Value = NormScaleModel;
myCommand.Parameters.AddWithValue("@RETURN_VALUE", "").Direction = ParameterDirection.ReturnValue;
int ok = 0;
try
{ ///打开数据库的连接
myConnection.Open();
}
catch (Exception ex)
{
throw new Exception("数据库连接失败!", ex);
}
try
{ ///执行数据库的存储过程(访问数据库)
SqlDataReader OrderDr = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
ok = (int)myCommand.Parameters["@RETURN_VALUE"].Value;
}
catch (Exception ex)
{
throw new Exception(ex.Message, ex);
}
finally
{
myConnection.Close();
}


问题是:为什么数据库里存的数据跟传过去的数据不一致呢?
数据库里的数据怎么会成了NormProcessCost为51.00,NormPrice为61.00,NormScaleModel为-75.589996337890625
...全文
40 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zq32206124 2009-06-08
  • 打赏
  • 举报
回复
没有人能解释一下么?
zq32206124 2009-06-07
  • 打赏
  • 举报
回复
我又试了一下,当float类型小数点后是一位的时候,数据库里面存的数据是正常的
也就是说float NormScaleModel = (float)-75.5; 这样的时候没有问题
但是float NormScaleModel = (float)-75.59;这样的时候数据库里面的数据就变成-75.589996337890625了
有没有人能解决这个问题啊
程序漫步 2009-06-07
  • 打赏
  • 举报
回复
up
zq32206124 2009-06-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 che2piaopiao 的回复:]
类型
[/Quote]
太简洁明了了,就是范围太大了
zq32206124 2009-06-07
  • 打赏
  • 举报
回复
51.1正常了,是因为我存储过程定义类型时错了应该是decimal(18,2),我把括号里面内容给拉了。
可是FLOAT的数据还是那样,传值时小数点明明是两位,为什么存的时候会使好多位了呢,有没有知道这个问题怎么解决的,先谢谢了
che2piaopiao 2009-06-07
  • 打赏
  • 举报
回复
类型
zq32206124 2009-06-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhouyongli41 的回复:]
参数类型也是改为SqlDbType.Float
[/Quote]
我数据库里面用的是decimal类型啊。
zhouyongli41 2009-06-07
  • 打赏
  • 举报
回复
double NormProcessCost = (double)51.1;
zhouyongli41 2009-06-07
  • 打赏
  • 举报
回复
参数类型也是改为SqlDbType.Float
zq32206124 2009-06-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhouyongli41 的回复:]
decimal NormProcessCost = (double)51.1;
decimal NormPrice = (double)60.94;
类型不对
[/Quote]
double类型无法转换为decimal 类型的。。
zhouyongli41 2009-06-07
  • 打赏
  • 举报
回复
decimal NormProcessCost = (double)51.1;
decimal NormPrice = (double)60.94;
类型不对
zq32206124 2009-06-07
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 chen_ya_ping 的回复:]
可能是数据库计算精度的问题,那你也就把 float NormScaleModel = (float)-75.59;
decimal NormScaleModel=(decimal)-75.59,把数据库中对应的字段的类型改为decimal
[/Quote]
其实存什么数据对我倒是没有什么大碍,最主要的是我想知道的是为什么,呵呵。
chen_ya_ping 2009-06-07
  • 打赏
  • 举报
回复
可能是数据库计算精度的问题,那你也就把 float NormScaleModel = (float)-75.59;
decimal NormScaleModel=(decimal)-75.59,把数据库中对应的字段的类型改为decimal
pengyong_tao 2009-06-07
  • 打赏
  • 举报
回复
大概是因为电脑本身计算问题吧。
计算的精度太高。

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧