2013-03-21 149 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'什么? – 2013-03-21 13:17:25

+0

@SonerGönül,这是一个错字,寒意! – Liam 2013-03-21 13:19:05

+0

如果OP拷贝的代码是逐字记录的,那么它们可能会被认为是错误的,那么他们通常会抱怨说,如果他们对编码不熟悉并且不熟悉Intellisense – MethodMan 2013-03-21 13:31:56

回答

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

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

,则它不起作用。不要忘记使用中性文化或分隔点在某些系统上将无法正确读取。 – Virtlink 2013-03-21 13:18:47

+1

'string.format'应该是'string.Format' – MethodMan 2013-03-21 13:19:22

0

试试这个:

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

@Virtlink谢谢你,我错过了cultureinfo – CloudyMarble 2013-03-21 14:00:55

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

这不会在我看来= = – 2013-03-21 13:21:52

+2

'+ 1'我同意有很多方法去皮肤猫,仍然最后与猫呜咽... – MethodMan 2013-03-21 13:27:22

-1

您可以使用string.Join()方法来完成这也

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

Output 500.45

+0

这个答案是正确的,不知道为什么有人会downvote它..人们应该测试我们在这里写的答案,他们downvote之前..我实际上测试它的代码,否则我不会已将其添加为答案.. – MethodMan 2013-03-21 15:22:25

+0

-1:您的代码在我的系统上不起作用,因为在我的默认文化中,小数点分隔符是逗号,而不是点。结果是'50045',显然是不正确的。如果我在代码中将其更改为逗号,则它不适用于您的系统。 – Virtlink 2013-03-23 02:18:27

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 2013-03-21 13:31:44

+0

@Liam您不必为荷兰语(或任何其他使用小数逗号的语言)配置服务器,但是您(作为一名优秀的程序员)必须意识到,转换将在某些非美国国家/地区失败系统,而且这很容易解决! – Virtlink 2013-03-21 13:33:33

+1

我确实记得你的观点,但是描述一个非美国的系统,我怎么会碰到这些?我从来没有像这样将代码部署到服务器,这将是一个问题。 PS我在英国,所以我使用的是非美国系统。我说的是,仅仅因为你有**这样做,并没有使它*对所有人来说都是正确的* – Liam 2013-03-21 13:36:37

相关问题