У меня есть строковое значение для суммы, поступающей из БД. Местная культура в моей системе - португальский (pt-br). В результате сумма с десятичными значениями считывается как, например, 3,4 для 3.4. Мне нужно разобрать это так, чтобы оно отображало 3,4, но вместо этого, независимо от того, что я пытаюсь получить, мне становится 34. Я искал все, где было решение, и попытался реализовать ниже, но напрасно.Разбор значения с десятичными точками
// здесь грести [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);
Ни один из они, похоже, работают. Может кто-нибудь подскажет, есть ли другой способ добиться этого?
EDIT:
Оказывается, что значение я получаю от БД типа десятичной, так что я изменил мою 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()' уже численным типом? –
Вы действительно храните строку в своем db? Я сомневаюсь, потому что если так вам не понадобится вызов Convert.ToString. Итак, каков тип столбца db? –