【问题标题】:Same Culture, different value conversions相同的文化,不同的价值转换
【发布时间】:2014-07-03 11:58:08
【问题描述】:

我的网站从文本文件中提取数据到数据库中。读取数据后,我将字符串值转换为双精度值,使用:

oracom.Parameters.Add("nstpreisvm", OracleDbType.Double).Value = Convert.ToDouble(_material.Mat_StPreisVm);

如果我现在检查数据库中的结果(该列需要 NUMBER 格式),我会得到两个不同的值:在我的本地主机上通过 Visual Studio 2010,数据库返回 10,15 - 但是如果我让网络服务器上的进程,数据库只显示10。这是怎么发生的?

我现在在网站上实现了一个小标签,在页面加载上用当前文化填充它:

label.Text = Thread.CurrentThread.CurrentCulture.ToString();

CurrentCulture 在这两种情况下都是en-GB,那么这里的问题是什么?我错过了什么吗?


我的本​​地 Windows 是带有德语语言包的 Win7 SP1,服务器是带有标准英语安装的 Win2008 R2。

【问题讨论】:

  • 存储此值的列所期望的类型是什么?
  • @Aymeric 它是一个 Oracle 数据库,它希望在此列中使用 NUMBER

标签: c# asp.net culture


【解决方案1】:

我们在客户服务器上遇到了类似的问题,客户手动更改了该服务器上特定文化的小数分隔符。您可以使用以下方法进行检查:

Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator

我建议在解析时明确指定小数分隔符:

Double.Parse("1,25", new NumberFormatInfo(){ NumberDecimalSeparator = "," });

【讨论】:

  • 我会试试这个,还在开会。不过谢谢你的回答,我稍后再给你反馈!
  • 成功了,非常感谢!从来没有想过仅仅因为解析一个字符串就必须走这么远的路……
猜你喜欢
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
相关资源
最近更新 更多