【发布时间】:2016-01-09 19:47:08
【问题描述】:
我有一个来自数据库的金额的字符串值。我系统上的当地文化是葡萄牙语(pt-br)。因此,具有小数值的金额被读取为,例如:3,4 表示 3.4。我需要以显示 3.4 的方式解析它,但无论我尝试什么,我都会得到 34。我已经在每个地方搜索了解决方案并尝试实现以下内容,但徒劳无功。
//这里的row[item.columnName]是我正在循环的DataTable的行
解决方案 1:
Double amt = Double.Parse(Convert.ToString(row[item.columnName]), CultureInfo.InvariantCulture);
解决方案 2:
CultureInfo usCulture = new CultureInfo("en-US");
NumberFormatInfo dbNumberFormat = usCulture.NumberFormat;
Double amt = Double.Parse(Convert.ToString(row[item.columnName]), dbNumberFormat);
它们似乎都不起作用。有人可以建议我是否有其他方法可以实现这一目标?
编辑:
原来我从数据库中得到的值是十进制类型,所以我将我的 LOC 更改为以下。
decimal d = decimal.Parse(Convert.ToString(row[item.columnName]),new System.Globalization.CultureInfo("pt-BR", false));
它似乎仍然无法正常工作,我只是不知道哪里出错了。我在DotNetFiddle 上尝试了同样的事情 它工作得很好。下面是我试过的代码。
using System;
public class Program
{
public static void Main()
{
decimal d = decimal.Parse("1,35",new System.Globalization.CultureInfo("pt-BR", false));
Console.WriteLine(d.ToString());
}
}
我得到的结果和预期的一样是 1.35。我做错了什么?
【问题讨论】:
-
你能澄清一下:
Convert.ToString(row[item.columnName])到底是什么字符串?如果它有一个逗号,那么将它解析为 InvariantCulture 当然是行不通的。您必须使用 PT-br 文化。 -
row[item.columnName].GetType()已经是数字类型了吗? -
你真的在你的数据库中存储字符串吗?我怀疑,因为如果是这样,您将不需要
Convert.ToString电话。那么你的 db 列的类型是什么?
标签: c# parsing cultureinfo invariantculture