2013-02-19 114 views
1

我是C#的新手,我正在制作一个计算器,我想做一个简单的计算,但它无法正常工作。将double转换为字符串1

这里是当前行:

Convert.ToString(Convert.ToDouble(A.Text)+Convert.ToDouble(B.Text)+Convert.ToDouble(C.Text)); 

这里是1.1的样品输出在每个文本框: 1.1 + 1.1 + 1.1 = 33

+7

所以,你是C#的新手,看起来像C#。为什么添加C++和VBA标签?他们与你的问题无关。此外,你的问题不是特定于Windows,所以标签也是无效的。最后,当使用MonoDevelop而不是Visual Studio时,你会得到相同的结果,所以再次使用无效标记。这里只有C#有效。 – 2013-02-19 10:56:52

+0

请阅读[常见问题]和[问]几次.. – 2013-02-19 10:58:18

+1

Convert.ToDouble使用当前的文化。如果这种文化是德国的,那么'.'是组分隔符,而不是小数点。 – CodesInChaos 2013-02-19 10:58:34

回答

3

的问题是,你是不是指定培养在您的转换中。很可能你有德国文化(或其他欧洲文化),它使用点作为组分隔符,而不是小数点。结果是1.1被解释为11

解决办法有两个:

  1. 在当前的文化输入你的号码:1,1(首选)
  2. 使用不变的文化解析数字:

    Convert.ToString(
        Convert.ToDouble(A.Text, CultureInfo.InvariantCulture) + 
        Convert.ToDouble(B.Text, CultureInfo.InvariantCulture) + 
        Convert.ToDouble(C.Text, CultureInfo.InvariantCulture), 
        CultureInfo.InvariantCulture) 
    

的第一种方法是首选,因为它可以确保用户始终可以在自己的文化中输入数字。强迫某种文化对用户来说是20年前可以接受的事情,但不是现在。

+0

我该如何改变我的文化?还是让它接受? – cenh 2013-02-19 11:02:14

+0

@ChristianEngelsborgNaumannH:请参阅我的回答更新。 – 2013-02-19 11:03:50

+0

@ChristianEngelsborgNaumannH:同时接受两者是不可能的。当你输入1.001时,你将无法知道用户的意思。它可以是'1001'(如果用德国文化解释)或'1.001'(如果用不变文化解释)。 – 2013-02-19 11:06:19

-1

您需要计算总和,然后将这些部分加在一起。 String.Format是连接字符串的好方法。

double sum = Convert.ToDouble(A.Text)+Convert.ToDouble(B.Text)+Convert.ToDouble(C.Text); 
string resultStr = String.Format("{0}+{1}+{2}={3}", A.Text, B.Text, C.Text, sum); 
+0

-1:这不能解决问题。 – 2013-02-19 11:05:04

-2

您应该分配您的中间结果为双可变第一,然后把它放到一个字符串,即

double d = Double.Parse(A.Text) + Double.Parse(B.Text) + Double.Parse(C.Text); 

最终,你可以叫

string result = d.ToString(); 

这是远更轻松。

请参阅here

+0

-1:这不能解决问题。 – 2013-02-19 11:06:49

相关问题