C#科学计数法,有效位数
代码
/// <summary>
/// 有效数取值带科学计数法
/// </summary>
/// <param name="number">浮点值</param>
/// <param name="GYouXiao">有效位数</param>
/// <returns>结果</returns>
public string Significance(double number, int GYouXiao)
{
var A1 = number.ToString("G" + GYouXiao.ToString());
A1 = ScientificNotation(A1, GYouXiao);
if (!A1.Contains("×10")&& A1.Length< GYouXiao) {
if (A1.Contains("."))
{
A1 = A1.PadRight(GYouXiao+1, '0');
}
else
{
A1 = A1 + ".";
A1 = A1.PadRight(GYouXiao+1, '0');
}
}
return A1;
}
/// <summary>
/// 转换科学计数法
/// </summary>
/// <param name="input">输入值</param>
/// <param name="GYouXiao">有效位数</param>
/// <returns>结果</returns>
public static string ScientificNotation(string input,int GYouXiao)
{
if (string.IsNullOrEmpty(input))
return input;
if (!input.ToLower().Contains("e"))
return input;
string[] strs = new string[] { };
if (input.Contains("E"))
strs = input.Split('E');
else if (input.Contains("e"))
strs = input.Split('e');
if (strs.Length != 2)
return input;
double value;
if (!double.TryParse(strs[0], out value))
return input;
if (strs[1].Length < 2)
return input;
string result2 = strs[1].Replace("+", "").Replace("-", "");
string[] result2Strs = result2.Split('\r');
result2 = result2Strs[0];
int value2;
if (!int.TryParse(result2, out value2))
return input;
string uom = string.Empty;
if (result2Strs.Length > 1)
uom = "\r" + result2Strs[1];
Dictionary<char, char> ht = new Dictionary<char, char>();
ht.Add('+', '⁺');
ht.Add('-', '⁻');
ht.Add('0', '⁰');
ht.Add('1', '¹');
ht.Add('2', '²');
ht.Add('3', '³');
ht.Add('4', '⁴');
ht.Add('5', '⁵');
ht.Add('6', '⁶');
ht.Add('7', '⁷');
ht.Add('8', '⁸');
ht.Add('9', '⁹');
string result = strs[0];
result2 = value2.ToString();
bool isMinus = strs[1][0] == '-';
string minus = "";
if (isMinus)
minus = "⁻";
foreach (var kv in ht)
{
result2 = result2.Replace(kv.Key, kv.Value);
}
return $"{result}×10{minus}{result2}{uom}";
}
大致得思想就是通过一些特殊符号得替换来实现科学计数法。