设备上的双值不正确

时间:2012-09-16 17:08:25

标签: c# string windows-phone-7 double

int min = Int32.Parse(minutebox.Text);
double kj = Convert.ToDouble(a.kj);
double res = ((kj * op.koerpergewicht) * min);
textbox.Text = res.ToString();

在我的英文版WP7-Emulator上显示正确的数字(带标点符号 - > e。2.33)。但是它不能在我的设备上运行,设备设置为德语。

该值是正确的,但该双精度值中的点,逗号或其他内容未正确显示。

模拟器上的

43.22 - >设备上的4322

为什么?

2 个答案:

答案 0 :(得分:2)

  

但是它在我的设备上无效,设备设置为德语。

默认情况下将使用德语符号。如果你想总是使用“。”作为小数点,您应该考虑指定用于解析和可能格式化的不变文化。

在不知道kj是什么的情况下很难纠正您的代码,但我建议使用

double value = double.Parse(text, CultureInfo.InvariantCulture);
// Do calculation...
textBox.Text = result.ToString(CultureInfo.InvariantCulture);

你真的确定你想要覆盖设备的文化吗?这对我来说听起来不是一个好主意。当然,如果您从其他地方获取文本,您可能希望使用不变文化解析,但仍然在设备默认文化中对其进行格式化。

答案 1 :(得分:0)

好吧,我走得更远:

首先,我解析了所有我的Strings像这样的双重

op.mydouble = Double.Parse(rawkg,CultureInfo.InvariantCulture);

InvariantCulture部分非常重要。

我的其余计算是这样的:

 double res = 0; double reskcal = 0;
                double reskj;

                    res = ((kj * op.koerpergewicht) * min);
                    reskj = Convert.ToDouble(res, CultureInfo.InvariantCulture);
                    reskcal = Convert.ToDouble((res * 0.239), CultureInfo.InvariantCulture);

现在的问题是,reskcal正在回复我:

11,317845

Math.Round(11,317845,2)没有帮助。