C#实现有效位数,科学计数法实现代码

本文介绍了一种使用C#实现的有效数字科学计数法转换的方法。通过自定义函数Significance和ScientificNotation实现了浮点数值的有效位数控制及科学计数法的输出,适用于需要精确显示科学数据的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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}";
        }

大致得思想就是通过一些特殊符号得替换来实现科学计数法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

因为有你更精彩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值