txtdisplay.Text
)。但它只适合8个字符,所以如果我的计算超过8个字符,它将被切断,无法看到。
当字符的数量达到8以上时,如何将结果(例如120000000)变为(1.2e + 10)?
请注意,它实际上是两个问题,当文本框达到9个字符时如何使某些事情发生?我如何随后将文本框的内容转换为科学记数法?
答案 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?