java正数变负数变成正数(java中金额为负数设置方法)

基础数据类型的相互转换

在 Java 中,对于基础的数据类型转换是学习的重点之一, 只有知道了转换规则才能避免转换过程中遇到的一些坑。本篇就来说说数据类型之前的转换规则。

对于基础类型的转换有两种方式。 一种由小到大的转换, 不会丢失精度。另一种由大变小的强制转换, 有可能有丢失精度和出错。

对于基础类型的转换, Java 语言一共提供了 7 种数值类型进行相互转换。

根据现有规则把数据类型的转换分为了两种情况, 一种是自动转换, 另一种是强制转换。

转换规则(从小到大)

Java17基础数据类型的相互转换

自动转换

从小转到大的范围情况下可以自动转换, 也可以叫作隐式转换。按照数据类型的从小到大自动进行转换。

对于自动转换的规则遵守下面两个规则:

  1. 对于需要转换的数据类型必须要是转换前的数据类型兼容转换后的数据类型。
  2. 转换后的数据类型的范围必须比转换前的数据类型范围大。

代码演示:

Java17基础数据类型的相互转换

byte byteValue = 'a';  // 'a' ASCII is 97
short shortValue = byteValue;  // 97
int intValue = shortValue; // 97
long longValue = intValue; // 97
float floatValue = longValue; // 97
double doubleValue = floatValue; // 97
System.out.println(doubleValue);  //97

char charValue = 'a'; 
int intCharValue = charValue; // 97
System.out.println(intCharValue);

运行查看:

Java17基础数据类型的相互转换

以上是一级一级的往上转换。 所以不会出现问题, 哪怕是跳级也是可以的。

比方说:

byte byteVal = 'b';
int intVal  = byteVal;

或者是:

int intVal2 = 100;
double d = intVal2;

这样也没有问题。但是如果是下面这样就有问题了。

long longVal = 100;
//这里会报错。Type mismatch: cannot convert from long to int
int intVal3 = longVal; 

如果非要这样转,并且转换前的数据也是能够和更小类型兼容, 就需要使用强制转换。

强制转换

强制转换, 代表着数据类型的转换默认无法进行转换, 所以需要显式的进行类型转换。

强制类型转换的格式为在变量的名字前面加上括号写上基础类型。

格式:(需要转换的基础类型)变量;

long longValWait = 100;
int intConvert = (long)longValWait;

想要详细的了解强制类型转换, 需要先了解下面的这个图:

Java17基础数据类型的相互转换

占用字节大的数据类型转换字节小的就需要强制转换。 并且转换的时候需要注意丢失精度的问题。

让我看一个会丢失精度的代码例子:

Java17基础数据类型的相互转换

定义个 short , 规矩定义的规则我们可以得知 byte 的取值范围是: -128 到 127。所以当我们定义了不在改取值范围的值时, 比方例子中的 128 就会丢失精度。 让我们看一下丢失的数值跑哪去了。

首先可以看到 short 的字节是 2 , 也就是占用 16 bit,但是 byte 只占用 1 位,也就是 8 bit。所以在转换的时候, short 的前 8 bit 被丢了。

Java17基础数据类型的相互转换

并且在类型中, 最左侧的是符号位。8 位的符号位也就是1。在计算机处理二进制数的时候, 符号位 1 代表负值, 0 代表正值。所以后面 7 位代表数据的值。又因为负数在计算机中以补码形式存在的。 所以还需要转换成原码进行计算。也就是符号位不变的情况下,将后面 7 位二进制数即按位取反。并在最后一位加 1。

Java17基础数据类型的相互转换

这个时候就遇到了一个特殊的情况也就是 -128 的来源。因为 +0 和 -0 是一样的。但是对于 0 带符号来说没有意义。而且会有 [0000 0000] 和 [1000 0000] 两个原码。所以也就有了现在的补码。

补码是为了解决 0 的符号两个编码的问题。在补码运算中 [1000 0000] 就是 -128。也就得出来了我们的输出值 -128。

让我们看一下 129 的计算方式:

首先知道 129 的二进制是 [1000 0001],转换成 8 bit之后就变成首尾符号位为负数,

然后得出补码 [11111 1111] 也就是 -127 了。

Java17基础数据类型的相互转换

从这里我们也就可以根据补码知道了 byte 数据类型的取值范围:

[1111 1111] ~ [0111 1111] 也就是 -128 ~ 127。

这里总结一下原码, 反码,补码的大概含义。

原码:原码就是用第一位表示符号,其余位表示值,就如同上面的 16 位 [0000 0000 1000 0001]。

反码: 正数的反码是原码本身, 负数的反码是在原码的基础上, 其余各个位取反。

上面的值就变成:[0000 0000 1000 0001]

补码:正数的补码就是其本身, 负数的补码就是在原码的基础上, 其余的各位都取反,并在最后一位 + 1。也就是在反码的基础上 +1。

最终的补码变成:[0000 0000 1000 0001] 也就是129。

从这里也就可以看出来, 我们在进行数据处理的时候尽量不要用位数大的数据类型转换成小的数据类型, 除非你很清楚这样转换没有问题。

浮点类型的强制转换

以上说的都是整数的强制转换问题, 浮点型的也可以转换。 这里做两个演示。

Java17基础数据类型的相互转换

这里就是要引入浮点和整型进行转换或者运算的时候出现的问题。对于金融来说, 很少使用 float 和 double 进行运算和使用。推荐使用 BigDecimal 对象。具体为什么。了解原理可以参阅 : IEEE 754标准。后期有时间再写一篇详细的原因。主要还是二进制位的运算区别。

数据类型的转换, 先说到这里吧。 关注我。 后续更多基础到实战的内容。虽慢但永不停更。

版权声明:本文图片和内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送联系客服 举报,一经查实,本站将立刻删除,请注明出处:https://www.4kpp.com/7044.html

(0)
漫空客漫空客
上一篇 2023年4月23日
下一篇 2023年4月23日

相关推荐

  • 宫洺喜欢谁(宫洺喜欢谁原著)

    今天小编给各位分享宫洺喜欢谁(宫洺喜欢谁原著),如果能碰巧解决你现在面临的问题,别忘了关注小站,我们一起开始吧! 《小时代》原著中纵火的原因 凯蒂在童年早期就放火了。 原因是这样的…

    投稿 2023年4月23日
    1040
  • 霸占大牛股(霸占大牛股技术指标公式)

    今天给大家介绍牛股职业对应的知识点和牛股的技术指标公式。希望对你有帮助,也别忘了收藏这个网站。 要把握牛股,必须把握以下几点。 首先,我们要理解几个概念: 1.中心线: 持有时间上…

    投稿 2023年4月23日
    1060
  • 什么防辐射(什么防辐射植物)

    今天跟大家分享一个关于什么是防辐射(什么防辐射植物)的问题。以下是这个问题的总结。让我们来看看。 什么辐射防护? 随着电子设备的普及,人们越来越重视辐射。目前普遍认为辐射对健康有害…

    投稿 2023年4月23日
    1200
  • 天地劫幽城再临墨子道60终极boss攻略方法

    天地劫幽城再临墨子道的60终极boss怎么打?想必不少玩家也在为此而头疼,下面还请随小编一起墨子道60终极boss该怎么战胜吧,感兴趣的玩家不要错过了。 终极boss等一等也能打到…

    2023年4月23日
    1060
  • 两个人合伙开公司大忌(朋友合伙做生意必死)

    文章导语:要想避免合伙创业后的针锋相对,一定要学会看人,识人,拒人。如果学不会这些,一定会吃亏一辈子。有些人天生就是只能共苦不能同福的,因为他们骨子里就是极度自私的利己主义者! 去…

    2023年4月23日
    1440
  • 我爱我班主题班会(我爱我班主题班会教案)

    今天和大家分享一个关于我爱班级主题班会的问题(我爱班级主题班会教案)。以下是这个问题的总结。让我们来看看。 我爱我的班级主题班会 班级是学生们温暖的家,学生们是互帮互助的大家庭。为…

    投稿 2023年4月23日
    1470
  • 自制肉脯(自制肉脯的做法)

    今天给大家介绍一下自制腊肉,以及自制腊肉做法的相应知识点。希望对你有帮助,也别忘了收藏这个网站。 经典家常菜猪胸肉请大家指点一下? 材料 里脊肉300克 蜂蜜10g 原装泵4g 白…

    投稿 2023年4月23日
    2620
  • 房地产老项目土增清算(缴纳了营业税)

    某一般纳税人房地产企业开发了某开发房地产老项目,增值税按5%简易征收,项目开发周期横跨了营改增前后,部分销售收入缴纳了营业税。在土地增值税清算中,计税收入=增值税含税收入/(1+5…

    投稿 2023年4月23日
    1340
  • 却的拼音(彭的拼音)

    今天给大家介绍乔氏拼音和彭氏拼音对应的知识点。希望对你有帮助,也别忘了收藏这个站点。 Que的拼音怎么写? Que的拼音是【què】。 基本解释 退后。后退一步。 第二步撤退。~敌…

    投稿 2023年4月23日
    970
  • 审车多少钱(现在审车大概多少钱)

    汽车年检流程及费用标准 一、汽车年检流程 到机动车检测中心外检场地查验机动车——到业务大厅导办台审核资料取号——到窗口审核资料——核发检验合格标志。 二、汽车年检费用标准 年检的项…

    2023年4月23日
    1440

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注