vue实现在线进制转换功能

 更新时间:2025年04月15日 11:17:00   作者:勘察加熊人  
这篇文章主要介绍了vue实现在线进制转换功能,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧

vue实现在线进制转换

主要功能包括:

1.支持2-36进制之间的转换。
2.支持整数和浮点数的转换。
3.输入验证(虽然可能存在不严格的情况)。
4.错误提示。
5.结果展示,包括大写字母。
6.用户友好的界面,包括下拉菜单、输入框、按钮和结果区域。
7.小数部分处理,限制精度为10位。
8.即时转换(通过按钮触发,而非实时响应)。

效果图:

step1:C:\Users\wangrusheng\PycharmProjects\untitled18\src\views\Home.vue

<template>
  <div class="converter-container">
    <h1>在线进制转换</h1>
    <p class="description">支持在2~36进制之间进行任意转换,支持浮点型</p>
    <div class="converter-wrapper">
      <div class="converter-row">
        <div class="select-group">
          <select v-model="fromBase" class="base-select">
            <option v-for="n in bases" :value="n">{{ n }}进制</option>
          </select>
        </div>
        <div class="input-group">
          <input
            type="text"
            v-model="inputNumber"
            placeholder="转换数字"
            class="number-input"
          >
        </div>
      </div>
      <div class="converter-row">
        <div class="select-group">
          <select v-model="toBase" class="base-select">
            <option v-for="n in bases" :value="n">{{ n }}进制</option>
          </select>
        </div>
        <div class="result-group">
          <div class="result-display">{{ result }}</div>
        </div>
      </div>
    </div>
    <button @click="convert" class="convert-btn">立即转换</button>
  </div>
</template>
<script setup>
import { ref, computed } from 'vue'
const fromBase = ref(16)
const toBase = ref(10)
const inputNumber = ref('3c')
const result = ref('')
const bases = Array.from({ length: 35 }, (_, i) => i + 2); // 生成 2 到 36 的进制数组
const convert = () => {
  try {
    // Handle empty input
    if (!inputNumber.value) {
      result.value = '';
      return;
    }
    // Check if the input number is valid for the selected base
    const isValid = /^[0-9a-z.]+$/i.test(inputNumber.value);
    if (!isValid) {
      result.value = '输入包含无效字符';
      return;
    }
    // Separate integer and fractional parts
    const [integerPartStr, fractionalPartStr = ''] = inputNumber.value.split('.');
    // Convert integer part
    const integerPartDecimal = parseInt(integerPartStr, fromBase.value);
    if (isNaN(integerPartDecimal)) {
      result.value = '无效的输入数字';
      return;
    }
    const integerPartResult = integerPartDecimal.toString(toBase.value).toUpperCase();
    // Convert fractional part if it exists
    let fractionalPartResult = '';
    if (fractionalPartStr) {
      let decimalFraction = 0;
      for (let i = 0; i < fractionalPartStr.length; i++) {
        const digit = parseInt(fractionalPartStr[i], fromBase.value);
        if (isNaN(digit) || digit >= fromBase.value) {
          result.value = '无效的小数部分';
          return;
        }
        decimalFraction += digit * Math.pow(fromBase.value, -(i + 1));
      }
      let tempFractionalResult = '';
      let tempDecimal = decimalFraction;
      for (let i = 0; i < 10; i++) { // Limit precision to 10 digits
        tempDecimal *= toBase.value;
        const integerPart = Math.floor(tempDecimal);
        tempFractionalResult += integerPart.toString(toBase.value).toUpperCase();
        tempDecimal -= integerPart;
        if (tempDecimal === 0) {
          break;
        }
      }
      fractionalPartResult = '.' + tempFractionalResult;
    }
    result.value = integerPartResult + fractionalPartResult;
  } catch (error) {
    result.value = '转换出错';
    console.error("Conversion error:", error);
  }
}
</script>
<style scoped>
.converter-container {
  max-width: 600px;
  margin: 20px auto;
  padding: 20px;
  background: #fff;
  border-radius: 8px;
  box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
h1 {
  text-align: center;
  color: #333;
  margin-bottom: 10px;
}
.description {
  text-align: center;
  color: #666;
  margin-bottom: 30px;
}
.converter-wrapper {
  margin: 20px 0;
}
.converter-row {
  display: flex;
  gap: 10px;
  margin-bottom: 15px;
}
.select-group, .input-group, .result-group {
  flex: 1;
}
.base-select, .number-input {
  width: 100%;
  padding: 12px;
  border: 1px solid #fff;
  border-radius: 4px;
  font-size: 16px;
}
.result-display {
  padding: 12px;
  background: #f8f9fa;
  border: 1px solid #eee;
  border-radius: 4px;
  min-height: 46px;
}
.convert-btn {
  width: 100%;
  padding: 12px;
  background: #007bff;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
  font-size: 16px;
  transition: background 0.3s;
}
.convert-btn:hover {
  background: #0056b3;
}
</style>

到此这篇关于vue实现在线进制转换的文章就介绍到这了,更多相关vue在线进制转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 手把手教你如何将html模板资源转为vuecli项目

    手把手教你如何将html模板资源转为vuecli项目

    Vue可以直接集成html,Vue就是前端框架,使用Vue做前端开发效率非常高,下面这篇文章主要给大家介绍了关于如何将html模板资源转为vuecli项目的相关资料,需要的朋友可以参考下
    2023-04-04
  • antd的选择框如何增加tab选中的方法示例

    antd的选择框如何增加tab选中的方法示例

    这篇文章主要为大家介绍了antd的选择框如何增加tab选中的方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • el-tree树组件懒加载(后端上千条数据前端进行处理)

    el-tree树组件懒加载(后端上千条数据前端进行处理)

    本文主要介绍了el-tree树组件懒加载(后端上千条数据前端进行处理),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Vue中状态管理器(vuex)详解以及实际应用场景

    Vue中状态管理器(vuex)详解以及实际应用场景

    Vuex是一个专为Vue.js应用程序开发的状态管理模式,下面这篇文章主要给大家介绍了关于Vue中状态管理器(vuex)详解以及实际应用场景的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • Vue源码解析之数组变异的实现

    Vue源码解析之数组变异的实现

    这篇文章主要介绍了Vue源码解析之数组变异的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • 使用idea创建第一个Vue项目

    使用idea创建第一个Vue项目

    最近在学习vue,本文主要介绍了使用idea创建第一个Vue项目,文中根据图文介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 在vue中利用全局路由钩子给url统一添加公共参数的例子

    在vue中利用全局路由钩子给url统一添加公共参数的例子

    今天小编就为大家分享一篇在vue中利用全局路由钩子给url统一添加公共参数的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • vue之数据交互实例代码

    vue之数据交互实例代码

    本篇文章主要介绍了vue之数据交互实例代码,vue中也存在像ajax和jsonp的数据交互,实现向服务器获取数据,有兴趣的可以了解一下
    2017-06-06
  • 详解vue组件之间相互传值的方式

    详解vue组件之间相互传值的方式

    这篇文章主要介绍了vue组件之间相互传值的方式,对vue感兴趣的同学,可以参考下
    2021-05-05
  • vue3中reactive和ref函数及对比分析

    vue3中reactive和ref函数及对比分析

    这篇文章主要介绍了vue3中reactive和ref函数及对比,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01

最新评论