1

我从 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.CurrentCultureandRegionInfo.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

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

提前致谢!

4

3 回答 3

0

问题出在 Oracle 客户端,我的开发人员机器和服务器机器之间存在一些不一致,这就是为什么日期和十进制值在两台机器上显示不同的主要原因。

在本地、服务器和开发人员机器上查看时出错

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

在此处输入图像描述

希望它可以帮助别人。

于 2012-11-16T21:31:40.680 回答
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

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

于 2012-11-07T18:37:05.603 回答
0

对于数字:使用TryParse(...)适当的NumberStyle

对于日期:这是一个好习惯ParseExact

于 2012-11-07T18:39:08.557 回答