编码-小数

在这里插入图片描述

C语言中对于小数,采用float(单精度浮点型)和double(双精度浮点型)来存储。

Float

不管是float还是double,在存储中都分为三部分:

  • 第一位s代表符号位,1代表负数,0代表正数。
  • 第二个域是指数域e,对于单精度float类型,指数域有8位,可以表示0-255个指数值。指数值规定了小数点的位置,小数点的移动代表了所表示数值的大小。但是指数可以为正数,也可以为负数。为了处理负指数的情况,实际的指数值按要求需要加上一个偏差值作为保存在指数域中的值,单精度数的偏差值为 -127,而双精度double类型的偏差值为 -1023。比如,单精度指数域中的值为130,则表示实际的指数值=130-127=3。 偏差的引入使得对于单精度数,实际可以表达的指数值的范围就变成-127 到 128 之间(包含两端)。实际的指数值-127(保存为 全 0)以及 +128(保存为全1)保留用作特殊值的处理。这样,实际可以表达的有效指数范围就在 -126 和 +127 之间。
  • 第三个域为尾数域M,其中单精度数为 23 位长,双精度数为 52 位长。

Float = s * 2e-127 * m

在这里插入图片描述

举个栗子:将小数9.9转化为浮点数

  • 首先将9.9转换成24位二进制1001 . 1110 0110 0110 0110 0110
  • = 1 . 0011 1100 1100 1100 1100 110 * 2^3
  • 这里小数点前肯定是1,所以不需要存储。这样尾数域就是小数点的23位
  • 指数值e = 3 + 127 = 130 = 1000 0010
  • 符号位 = 0
  • 9.9 = 0 1000 0010 0011 1100 1100 1100 1100 110

0100 0001 0001 1110 0110 0110 0110 0110
0x411E6666

在线进制转换网站:https://lostphp.com/hexconvert/

在Java中计算百分比并保留两位小数可以通过以下步骤实现: 1. **计算百分比**:将目标数值除以总数值,然后乘以100。 2. **保留两位小数**:可以使用`java.math.BigDecimal`类的`setScale`方法,或者使用`java.text.DecimalFormat`类来格式化输出。 ### 使用 `BigDecimal` 实现 ```java import java.math.BigDecimal; import java.math.RoundingMode; public class PercentageCalculator { public static void main(String[] args) { double part = 45; double total = 200; // 计算百分比 double percentage = (part / total) * 100; // 使用 BigDecimal 保留两位小数 BigDecimal bd = new BigDecimal(percentage); double roundedPercentage = bd.setScale(2, RoundingMode.HALF_UP).doubleValue(); System.out.println("百分比: " + roundedPercentage + "%"); } } ``` ### 使用 `DecimalFormat` 实现 ```java import java.text.DecimalFormat; public class PercentageCalculator { public static void main(String[] args) { double part = 45; double total = 200; // 计算百分比 double percentage = (part / total) * 100; // 使用 DecimalFormat 格式化输出 DecimalFormat df = new DecimalFormat("0.00"); String formattedPercentage = df.format(percentage); System.out.println("百分比: " + formattedPercentage + "%"); } } ``` ### 注意事项 - **精度问题**:使用`double`类型进行除法运算可能会导致精度问题,因此推荐使用`BigDecimal`来处理需要高精度的计算。 - **四舍五入**:在保留小数时,需要指定四舍五入的方式,通常使用`RoundingMode.HALF_UP`,这是最常见的四舍五入方式[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

tangYi0_0

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

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

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

打赏作者

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

抵扣说明:

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

余额充值