2013-03-21 2 views
2

Я хочу получить десятичное значение, например 500.45, из двух строк. Как достичь этой операции?Присоедините две строки к одному десятичному значению

decimal value; //like 500.45 

string txt1, txt2; 
txt1 = "500"; 
txt2 = "45"; 

value = Convert.ToDecimal(txt1) + Convert.ToDecimal(txt2); //500.45 
+0

'string txt1 = 500' Что? –

+0

@ SonerGönül, это опечатка, холод! – Liam

+0

typo's можно считать ошибками, если копия OP копируется дословно, то они обычно жалуются, что они не работают, если они новы для кодирования и не знакомы с использованием Intellisense. – MethodMan

ответ

0
string txt1, txt2; 
txt1 = "500"; 
txt2 = "45"; 

decimal value = Convert.ToDecimal(string.Format("{0}.{1}", txt1, txt2)); 
+2

Не забудьте использовать нейтральную культуру или вашу разделительную точку не будет корректно читаться на некоторых системах. – Virtlink

+1

'string.format' должно быть' string.Format' – MethodMan

0

Попробуйте это:

decimal val; 
string txt1 = "500"; 
string txt2 = "45"; 
string textValue = txt1 + "." + txt2; 
decimal.TryParse(textValue, 
       NumberStyles.AllowDecimalPoint, 
       CultureInfo.InvariantCulture, 
       out val); 
+0

@Virtlink спасибо, я пропустил культуруinfo – CloudyMarble

0
value = Convert.ToDecimal(txt1 + "." + txt2); 
+1

Это не сработает по моему мнению =) –

+2

'+ 1' Я согласен, что есть много способов скинуть кошку и все еще в конечном итоге с киской, которая мурлычет ... – MethodMan

-1

Вы можете использовать string.Join() метод для выполнения этого слишком

string txt1, txt2; 
txt1 = "500"; 
txt2 = "45"; 
var valueJoin = Convert.ToDecimal(string.Join(".", txt1,txt2)); 

Output 500.45

+0

этот ответ правильный и не уверен, почему кто-то будет его понижать .. люди должны проверить то, что мы здесь написали, как ответы, прежде чем они спустит вниз. Я действительно протестировал код, который он работает, иначе я бы не стал добавили его в качестве ответа. – MethodMan

+0

-1: ваш код не работает в моей системе, потому что в моей культуре по умолчанию десятичный разделитель представляет собой запятую, а не точку. Результат - «50045», что, очевидно, неверно. Если я изменю его в вашем коде на запятую, он не будет работать в вашей системе. – Virtlink

0

Очевидно, единственный ответ, который каждый может придумать, - это тривиальный (конкатенация между точкой и разбор его). Но тогда сделайте это правильно, пожалуйста! (Я дал достаточно подсказок!) В моей системе, например, десятичный разделитель является запятой, поэтому весь ваш код не будет работать. Вы должны сделать это в нейтральной культуры, например:

string integerPart = "500"; 
string fractionalPart = "45"; 

decimal result = Decimal.Parse(
    // Combine the strings to a new string "500.45" 
    String.Format("{0}.{1}", integerPart, fractionalPart), 
    // We allow a leading sign "-500.45", and a decimal point 
    NumberStyles.AllowLeadingSign | NumberStyles.AllowDecimalPoint, 
    // We use a neutral culture in which the decimal separator is a dot (.) 
    CultureInfo.InvariantCulture); 

Если строки пользовательского ввода, вы должны использовать TryParse вместо и обрабатывать случай, когда он выходит из строя из-за неправильного ввода данных пользователем:

decimal result; 
if (!Decimal.Parse(
    String.Format("{0}.{1}", integerPart, fractionalPart), 
    NumberStyles.AllowLeadingSign | NumberStyles.AllowDecimalPoint, 
    CultureInfo.InvariantCulture, 
    out result)) 
{ 
    // Handle invalid user input. 
} 
+0

Я принимаю вашу точку зрения, но я никогда не должен был указывать культуру при выполнении этого типа преобразования. В Голландии это может быть проблемой. Здесь нет. Обычно я не настраиваю свои серверы для голландских. – Liam

+0

@ Liam Вам не нужно настраивать серверы для голландского (или любого другого языка, использующего десятичную запятую), но вы (как хороший программист) должны знать, что конверсия будет неудовлетворительной в отношении некоторых неамериканских систем, и что это очень легко решить! – Virtlink

+1

Я действительно принимаю ваше решение, но описываю систему, отличную от Us, и как бы мне это понять? Я никогда не развертывал такой код на сервере, где это было бы проблемой. PS Я в Великобритании, поэтому я использую систему не в США. То, что я говорю, просто потому, что у вас ** есть **, чтобы сделать это таким образом, не делает это * правильным * для всех – Liam

Смежные вопросы