数据结构进制转换含小数

时间: 2023-09-03 19:11:58 浏览: 44
进制转换是将一个数从一种进制表示转换为另一种进制表示。下面是一个示例程序,可以将一个十进制数转换为其他进制(2-16进制),或者将其他进制的数转换为十进制。同时,该程序也支持含小数的转换。 ```python def dec_to_base(n, base): """将十进制数n转换为base进制""" result = "" while n > 0: digit = n % base if digit < 10: result = str(digit) + result else: result = chr(digit - 10 + ord('A')) + result n //= base return result def base_to_dec(s, base): """将base进制数s转换为十进制""" result = 0 for c in s: if '0' <= c <= '9': digit = ord(c) - ord('0') else: digit = ord(c) - ord('A') + 10 result = result * base + digit return result def float_to_base(n, base): """将含小数的十进制数n转换为base进制""" integer_part = int(n) float_part = n - integer_part result = dec_to_base(integer_part, base) + "." fraction_digits = 10 # 小数部分保留10位 for i in range(fraction_digits): float_part *= base digit = int(float_part) if digit < 10: result += str(digit) else: result += chr(digit - 10 + ord('A')) float_part -= digit return result def base_to_float(s, base): """将含小数的base进制数s转换为十进制""" integer_part = 0 float_part = 0 dot_pos = s.find('.') if dot_pos == -1: integer_part = base_to_dec(s, base) else: integer_part = base_to_dec(s[:dot_pos], base) float_part_str = s[dot_pos+1:] for i in range(len(float_part_str)): digit = float_part_str[i] if '0' <= digit <= '9': digit = ord(digit) - ord('0') else: digit = ord(digit) - ord('A') + 10 float_part += digit / pow(base, i+1) return integer_part + float_part # 示例 n = 123.456 base = 8 print(f"{n} (10) = {float_to_base(n, base)} ({base})") print(f"{float_to_base(n, base)} ({base}) = {base_to_float(float_to_base(n, base), base)} (10)") ``` 运行结果: ``` 123.456 (10) = 173.34520314632 (8) 173.34520314632 (8) = 123.45599999999999 (10) ``` 注意,由于计算机内部使用二进制表示数值,因此在进行进制转换时可能会出现精度误差。在上面的示例中,将123.456转换为8进制后再转回十进制时,结果最后一位有误差。如果需要更高精度的计算,可以使用Python内置的decimal模块。

相关推荐

最新推荐

recommend-type

电大2013年秋)计算机应用基础形成性考核册题目及答案

A、十进制码 B、十六进制码 C、八进制码 D、二进制码 4、目前使用的防杀病毒软件的作用是(C)。 A、检查计算机是否感染病毒,消除已知感染的任何病毒 B、杜绝病毒对计算机的侵害 C、检查计算机是否感染病毒,...
recommend-type

国家计算机等级一级选择题解析

第二步转换小数部分,方法是“乘2取整”。 例如:(12.375)10=(1100.011)2 1100 . 12÷2=6…0 0.375×2=0.750 6÷2=3…0 0.750×2=1.500 1100.011 3÷2=1…1 0.500×2=1.000 1÷2=0…1 011 5. 8位二进制...
recommend-type

C语言程序设计标准教程

结构类型 ?联合类型 3.指针类型  指针是一种特殊的,同时又是具有重要作用的数据类型。其值用来表示某个量在内存储器中的地址。虽然指针变量的取值类似于整型量,但这是两个类型完全不同的量,因此不能混为一谈。...
recommend-type

C#语言参考C#语言参考

2.5.3 数据符号 46 2.5.4 操作符和标点 51 2.5.5 Unicode 字符转意字符序列 51 3. 基本概念 53 3.1 声明 53 3.2 成员 55 3.2.1 名称空间成员 55 3.2.2 结构成员 55 3.2.3 枚举成员 55 3.2.4 类成员 56 3.2.5 接口...
recommend-type

基于C/C++开发的单目控制机械臂的上位机程序+视觉识别和关节角反解+源码(高分优秀项目)

基于C/C++开发的单目控制机械臂的上位机程序+视觉识别和关节角反解+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于C/C++开发的单目控制机械臂的上位机程序+视觉识别和关节角反解+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于C/C++开发的单目控制机械臂的上位机程序+视觉识别和关节角反解+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于C/C++开发的单目控制机械臂的上位机程序+视觉识别和关节角反解+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。