winforms 将文本框中的1*10^4转换为双精度[已关闭]

csga3l58  于 2022-12-27  发布在  其他
关注(0)|答案(1)|浏览(112)

已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

2天前关闭。
Improve this question
我希望我的程序从用户输入的文本框中接收幂数格式的数字。计算并显示答案,然后将其存储在SQL数据库中。
输入编号示例:

1*10^4

应该解析成1e4,我不知道怎么用文本框取,用幂函数计算,谢谢。

7nbnzgx9

7nbnzgx91#

您可以尝试使用 * 正则表达式 * 来匹配mantissaexp内容,例如:

using System.Globalization;
using System.Text.RegularExpressions;

...

private static bool TryMyParse(string text, out double result) {
  if (string.IsNullOrWhiteSpace(text)) {
    result = double.NaN;

    return false;
  } 

  var match = Regex
    .Match(text, @"^\s*(?<mantissa>[+-]?[0-9]+(\.[0-9]+)*)(\s*\*\s*10\s*\^\s*(?<exp>[+-]?[0-9]+))?\s*$");

  if (!match.Success) {
    result = double.NaN;

    return false;
  } 

  result = double.Parse(match.Groups["mantissa"].Value, CultureInfo.InvariantCulture) * 
           Math.Pow(10, int.TryParse(match.Groups["exp"].Value, out int exp) ? exp : 0);

  return true;
}

用法(请自行fiddle

if (TryMyParse(myTextBox.Text, out double value)) {
  // myTextBox.Text has been parsed into double value
}
else {
  // Invalid syntax of myTextBox.Text 
}

**编辑:**反向翻译可以是这样的

static string ToMyFormat(double value) {
  if (value == 0 || !double.IsFinite(value))
    return value.ToString();

  string sign = value < 0 ? "-" : "";

  value = Math.Abs(value);

  int exp = (int)Math.Log10(value);
  double mantissa = value / Math.Pow(10, exp);

  return exp == 0 
    ? sign + mantissa.ToString()
    : sign + mantissa.ToString() + "*10^" + exp.ToString();
}

相关问题