ToDecimal地区/文化问题

时间:2012-11-07 18:13:01

标签: c# visual-studio-2010 oracle cultureinfo

我从Oracle数据库收到以下值(作为varchar):7876,72 在Visual Studio中,它被读作String

案例1(预期案例):

当我调试时,我看到:7876.72当我尝试Convert.ToDecimal("7876.72")时,我得到7876.72D

案例2(错误案例):

当我调试时,我看到:7876,72当我尝试Convert.ToDecimal("7876,72")时,我得到787672D

我正在检查CultureInfo.CurrentCultureRegionInfo.CurrentRegion,两台机器上都是一样的......

主要原因是:

Convert.ToDecimal("7876,72").ToString("0,0.00", CultureInfo.InvariantCulture)给了我:787,672.00,它应该是7,876.72

Global.asax - Application_Start

Dim newCulture As CultureInfo = DirectCast(System.Threading.Thread.CurrentThread.CurrentCulture.Clone(), CultureInfo)
newCulture.DateTimeFormat.ShortDatePattern = "yyyy/MM/dd"
newCulture.DateTimeFormat.DateSeparator = "/"
newCulture.NumberFormat.CurrencyDecimalSeparator = "."
newCulture.NumberFormat.NumberDecimalSeparator = "."
Thread.CurrentThread.CurrentCulture = newCulture

关于如何在两台机器上保持相同价值的任何想法?

提前致谢!

3 个答案:

答案 0 :(得分:0)

您将上述输出视为未预期,因为以下值7876,72等于787672。逗号仅用于分隔数字,但转换时不用于表示小数点。但是,小数点由以下字符 .

表示

我建议您将字符,替换为.,因为您希望获得小数点而不是,

示例

string NumberFromDatabase = "7876,72"; //Initialize a new string of name NumberFromDatabase as 7876,72
string NumberAfterReplacement = NumberFromDatabase.Replace(',', '.'); //Initialize a new string of name NumberAfterReplacement as 7876.72
decimal Output = Convert.ToDecimal(NumberAfterReplacement); //Initialize a new decimal of name Output as 7876.72

谢谢, 我希望你觉得这很有帮助:)

答案 1 :(得分:0)

对于数字:将TryParse(...)与适当的NumberStyle

一起使用

对于日期:这是ParseExact

的好习惯

答案 2 :(得分:0)

问题在于Oracle客户端,我的开发人员机器和服务器机器之间存在一些不一致,这是两台机器上显示不同的日期和小数值的主要原因。

Error seeing locally, server and developer machine

解决方案是强制两台计算机的行为方式相同,为此我们更改了Oracle客户端的密钥并添加了所需的参数:

enter image description here

希望它可以帮助别人。