You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C# WinForm中实现带小数的二进制转十进制?

二进制转十进制(支持小数)的实现方案

你的原代码仅能处理二进制整数转十进制的场景,直接用Convert.ToInt32转换带小数点的字符串会抛出格式异常,且完全未考虑二进制小数的转换逻辑。下面是修改后的实现,支持带小数的二进制数转换,同时加入输入验证避免无效输入:

核心逻辑说明

  1. 拆分输入:将输入字符串按小数点拆分为整数部分和小数部分
  2. 整数部分计算:从右往左遍历每一位,每一位数字乘以2的n次方(n从0开始递增),累加得到整数结果
  3. 小数部分计算:从左往右遍历每一位,每一位数字乘以2的-n次方(n从1开始递增),累加得到小数结果
  4. 输入验证:确保输入仅包含0、1和最多一个小数点,避免非法格式

修改后的完整代码

if (binarybtn.Checked)
{
    string inputStr = textBox1.Text.Trim();
    decimal totalResult = 0;

    // 验证输入是否为合法二进制格式(允许整数、小数或纯小数/纯整数)
    if (!System.Text.RegularExpressions.Regex.IsMatch(inputStr, @"^[01]+(\.[01]+)?$"))
    {
        decimaltxtbox.Text = "无效输入:仅允许0、1和最多一个小数点";
        binarytxtbox.Text = inputStr;
        return;
    }

    // 拆分整数与小数部分
    string[] numberParts = inputStr.Split('.');
    string integerSection = numberParts[0];
    string fractionalSection = numberParts.Length > 1 ? numberParts[1] : string.Empty;

    // 计算整数部分
    if (!string.IsNullOrEmpty(integerSection))
    {
        long integerValue = 0;
        long powerOfTwo = 1;
        // 从右往左遍历整数位
        for (int i = integerSection.Length - 1; i >= 0; i--)
        {
            int digit = integerSection[i] - '0';
            integerValue += digit * powerOfTwo;
            powerOfTwo *= 2;
        }
        totalResult += integerValue;
    }

    // 计算小数部分
    if (!string.IsNullOrEmpty(fractionalSection))
    {
        decimal fractionalValue = 0;
        decimal powerOfTwo = 0.5m; // 对应2^-1
        // 从左往右遍历小数位
        foreach (char digitChar in fractionalSection)
        {
            int digit = digitChar - '0';
            fractionalValue += digit * powerOfTwo;
            powerOfTwo /= 2;
        }
        totalResult += fractionalValue;
    }

    decimaltxtbox.Text = totalResult.ToString();
    binarytxtbox.Text = inputStr;
}

关键细节说明

  • 使用decimal类型存储最终结果,避免浮点数(如double)的精度丢失问题
  • 整数部分用long类型替代int,支持更大范围的二进制整数转换
  • 正则表达式验证输入格式,提前拦截非法输入(比如包含2-9、多个小数点的情况)
  • 兼容多种合法输入格式:如101、101.101、.101、101.等

内容的提问来源于stack exchange,提问作者user21264001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 17:11:09