达到特定字符数时,将十进制转换为科学

时间:2014-09-29 16:04:02

标签: c#

我正在制作一个计算器。我有一个显示输出计算的文本框(txtdisplay.Text)。但它只适合8个字符,所以如果我的计算超过8个字符,它将被切断,无法看到。

字符的数量达到8以上时,如何将结果(例如120000000)变为(1.2e + 10)?

请注意,它实际上是两个问题,当文本框达到9个字符时如何使某些事情发生?我如何随后将文本框的内容转换为科学记数法?

4 个答案:

答案 0 :(得分:2)

将double转换为字符串时,可以使用格式说明符。 " G"格式说明符使用较短的定点和科学记数法。您可以使用" G#"指定截止的最大位数。因此,例如将数字限制为8位使用:

double x = 120000000;
string text  = x.ToString("G8"); // 1.2E+08

如果你真的想要有限数量的角色,你可以这样做:

private static string FormatDouble(double d)
{
    string text = d.ToString();
    return text.Length > 8 ? d.ToString("0.#E+0") : text;
}

请注意,8个字符非常有限。您必须显示尾数的符号,指数(最多3个字符),指数符号,小数点分隔符," E",最多可显示7个字符甚至没有考虑到尾数本身。

答案 1 :(得分:0)

此代码将您的号码转换为科学记数法:

yournumber.ToString("G2", CultureInfo.InvariantCulture)

此代码可以帮助您确定文本已更改:

textBox.TextChanged += new EventHandler(textBox_TextChanged);

...    

private void textBox_TextChanged(object sender, EventArgs e)
{
//code to handle changes
}

答案 2 :(得分:0)

 private void CalcTextBox_TextChanged(object sender, RoutedEventArgs e)
 {
     int testInt = 0;

     if (((TextBox)sender).Text.Length > 8 && int.TryParse(((TextBox)sender).Text, out testInt))
     {
        ((TextBox)sender).Text = String.Format("{0:E2}", testInt); 
     }
 }

附加到TextChanged事件,并将其设置在那里。

答案 3 :(得分:0)

Double.ToString()提供了开箱即用的此功能级别。默认功能似乎不适合您的特定问题。您可以使用特定格式,例如Double.ToString("G8", CultureInfo.InvariantCulture),但这也可能不够用。您可能需要创建自己的IFormatProvider实现以满足您的需求。

请考虑以下资源:

http://msdn.microsoft.com/en-us/library/shxtf045.aspx

When does Double.ToString() return a value in scientific notation?