十进制小数转换成二进制的原理理解

虚拟货币
• 阅读 15694

十进制小数转换成二进制的原理理解

在学习浮点数据类型的时候,涉及到了10进制的小数如何转成2进制数的问题(此文章不讨论精度问题,仅涉及转换原理--乘2取整).学习到的方法是“乘2取整“,但是一直不知道具体原理是什么,现在从数学上说明一下原理

乘2取整的操作方法

将十进制的小数部分乘2,将所得结果的整数位作为二进制的位。舍弃乘2所得结果的整数部分,如果剩余部分为0,计算结束。否则继续乘2,进行取整操作(所得整数位继续向右添加)。(如果出现循环,则终止计算,写成循环小数格式,或根据精度位数要求,保留结果位数,停止计算)
举例说明:


十进制数:0.25

1. 0.25 x 2 = 0.5 二进制数 : 0.0

2. 0.5 x 2 = 1.0 二进制数 : 0.01

结果二进制数: 0.01

原理解释

十进制数的小数部分 M 对应二进制部分应为 A1 * 2^(-1) + A2 * 2^(-2) + ... + An * 2^(-n) 其中An 为 0 或 1

现在将 M 乘 2 :M * 2 = A1 * 2^0 + A2 * 2^-1 + ... + An * 2^(1-n)

此时,A1 * 2^0 = A1 即为 M * 2的整数部分的值 求出了A1.

然后舍弃M * 2 的整数部分,即舍弃了 A1. M * 2 - A1 = A2 * 2^-1 + ... + An * 2^(1-n)

最后不断重复这一计算方式,直到乘2所得的结果小数部分为0(或者达到要求精度的位数)为止,二进制小数即为: 0.A1A2..Am (为0时m=n,否则根据精度要求决定m大小)

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
JS中二进制与十进制的相互转换
今天在做题目的时候遇到了需要十进制转换为二进制,这个我知道用toString可以,但是二进制转换为十进制我一下子就想不起来,网上搜了下,才知道是parseInt可以实现,特此记录下。十进制转换为二进制:varnum100;console.log(num.toString(2));toString()方法可把一个
Wesley13 Wesley13
3年前
Java 的BigDecimal
原文:http://blog.csdn.net/diyu122222/article/details/76887382decimaldecimal(18,0)18是定点精度,0是小数位数。decimal(a,b)a指定指定小数点左边和右边可以存储的十进制数字的最大个数,最大精度38。b指定小数点右边可以存储的十
Wesley13 Wesley13
3年前
Java:利用BigDecimal类巧妙处理Double类型精度丢失
本篇要点简单描述浮点数十进制转二进制精度丢失的原因。介绍几种创建BigDecimal方式的区别。整理了高精度计算的工具类。学习了阿里巴巴Java开发手册关于BigDecimal比较相等的规定。经典问题:浮点数精度丢失精度丢失的问题是在其他计算机语言中也都会出
Stella981 Stella981
3年前
RabbitMQ——最大连接数
默认情况下,rabbitmq文件句柄数设置是1024。连接数最多为829,连接数的具体计算方式为:连接数(文件句柄数100)\0.9,计算后的值取整再减2。例如:(1024100)\0.9831.6,取整831再减2得到829。!(https://oscimg.oschina.net/oscnet/5158d7f77c3
Easter79 Easter79
3年前
TypeScript 基本类型(一)
1、boolean布尔值true/falseletisDone:booleanfalse;2、number数字:和JavaScript一样,TypeScript里的所有数字都是浮点数。另外支持二进制,八进制,十进制,十六进制。letdecLiteral:number6;lethex
Wesley13 Wesley13
3年前
JS你所不知的小数取整方法
先介绍几种基本方法。1.toFixed()方法toFixed()方法是属于Number对象的方法,可以把Number四舍五入到指定的小数位数,括号内为小数位数,范围为0~20,为0时即取整数。1.5.toFixed(0)//返回2toFixed()方法是平时使用最多的方法,因为它不仅可
Stella981 Stella981
3年前
JavaScript 动画 3
一、要点速度:varspeed(iTargetcDiv1.offsetLeft)/10;  //10为运动系数缓缓运动为了避免速度为小数:speedspeed0?Math.ceil(speed):Math.floor(speed);  //如果速度大于0向上取整;速度小于0向下取整<!DOCTYPEh
Wesley13 Wesley13
3年前
2.python内置数据结构
第一类:数值类型一.数值型包括1.int(整型):python3里数字不管多大永远都是int长整型,且没有大小限制,受限于内存区域的大小类型转换:int(x)返回一个整数2.float(浮点型):有整数部分和小数部分组成。支持十进制和科学计数法表示。只有双精度型类型转换:float(x)返回一个浮点数3.c
Wesley13 Wesley13
3年前
IEEE754 学习总结
(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cnblogs.com%2FPerhapsLove%2F)以下是参考《IEEE754学习总结》并结合自己学习总结一:前言二:预备知识三:浮点数的表示范围四:将浮点格式转换成十进制数一
Wesley13 Wesley13
3年前
C#字符串格式化输出—C#基础回顾
2.10.cs/author:frankdatetime:201772011:19:34格式化字符串:C:本地货币格式D:十进制格式,把整数转换为以10为基数的数,如果给定一个精度说明符,就加上前导0E:科学计数法(指数)格式。精度说明符设置小数位数(默认为6)。格式字
贾蔷 贾蔷
1个月前
手把手教你实现进制转换(C++代码注释+小白友好教程)
一、简介和特点是编程中常见的操作,即将数值从一种进制(如十进制)转换为另一种进制(如、十六进制等)。本了一个通用的进制转换工具,具有以下特点:1.支持小数转换:不仅能转换整数,还能处理小数部分的进制转换(如将0.25转换为二进制)。2.灵活进制设定:用户可