高考考试网
当前位置: 首页 高考资讯

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

时间:2023-05-24 作者: 小编 阅读量: 5 栏目名: 高考资讯

基础数据类型的相互转换在Java中,对于基础的数据类型转换是学习的重点之一,只有知道了转换规则才能避免转换过程中遇到的一些坑。一种由小到大的转换,不会丢失精度。另一种由大变小的强制转换,有可能有丢失精度和出错。对于基础类型的转换,Java语言一共提供了7种数值类型进行相互转换。根据现有规则把数据类型的转换分为了两种情况,一种是自动转换,另一种是强制转换。

基础数据类型的相互转换

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

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

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

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

转换规则(从小到大)

自动转换

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

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

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

代码演示:

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

运行查看:

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

比方说:

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

或者是:

int intVal2 = 100;double d = intVal2;

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

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

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

强制转换

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

浮点类型的强制转换

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

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

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

    推荐阅读
  • 羽绒被总是跑毛怎么解决(羽绒被跑毛处理方法)

    羽绒被总是跑毛怎么解决?以下内容大家不妨参考一二希望能帮到您!羽绒被总是跑毛怎么解决首先是在原来的被罩上再增加一个被罩,其实这个方法是最简单的,这样就不会再钻毛了,之后清洗的时候,也只需要清洗第一层就可以了。减少清洗的次数。所以减少清洗的次数也是非常重要的,一般的情况下,最好是一年清洗三四次就可以了,这样不仅可以保护好羽绒被,同时也不会那么脏。

  • 西葫芦为什么是苦的(西葫芦发苦是什么原因)

    我们一起去了解并探讨一下这个问题吧!西葫芦为什么是苦的苦味素含量过高:西葫芦中含有一种名叫“苦味素”的物质,它可以导致西葫芦变苦,若种植时选用的品种较差,种植出来的西葫芦其味道就会比较苦。

  • 钓鱼鱼线怎么选择(教你4个鱼线挑选小常识)

    可以用牙咬的办法测试鱼线的韧性。具体就时用牙咬一下鱼线,如果不是很用力就可以将鱼线咬变形,咬扁这就说明鱼线的韧性是很好的。拉力是重中之重,鱼线的拉力不行,其它的标准就没必要考虑了,直接弃用。“一分钱一分货”也不一定就对。市场上有许多包装精美的,以次充好的鱼线,也有比较便宜的,不是名牌的好线。鱼线的外观,手感。

  • 个性qq网名2022年除夕最新版的女生(好听的女生网名)

    凉城听暖挽梦忆笙歌,今天小编就来说说关于个性qq网名2022年除夕最新版的女生?下面更多详细答案一起来看看吧!

  • 长沙市新文化之都(文化场景和网红品牌激活夜经济)

    长沙市连续3年入选“中国城市夜经济十大影响力城市”,拥有4个国家级夜间文化和旅游消费集聚区。据最新的数据显示,长沙市夜间消费占全天消费比重达52.6%。市政府每年投入近3000万元向长沙音乐厅、梅溪湖大剧院等购买公共服务,推出惠民票价。梅溪湖大剧院演出超过500场、接待80多万观众,长沙音乐厅为市民提供了上千场次视听盛宴,提升夜经济消费品位。长沙国金中心370多家商户中,包含100家首次入湘品牌。

  • 渐变指甲油是怎样的(怎样涂渐变指甲油)

    用棉签蘸卸甲液去除指甲上的指甲油根据理想的长度用指甲刀修剪指甲然后用指甲锉磨平指甲边缘,并给指甲定型用去死皮叉去掉指甲根部的死皮,增加指甲外露的面积,让它看起更修长,我来为大家讲解一下关于渐变指甲油是怎样的?然后用指甲锉磨平指甲边缘,并给指甲定型。底油能起到保护指甲,光滑甲面的作用,方便之后上色。通常底色需要涂两层。另可分两次薄涂,也不要一次性涂上厚厚的一层。

  • 单纯什么意思(单纯词语的含义)

    下面内容希望能帮助到你,我们来一起看看吧!单纯什么意思单纯的字面意思就是简单纯一,不复杂。单纯的好处,也就是自己的精神领域是纯而静的,没有卷入勾心斗角的是非中去。但是单纯的人在社会上很容易被骗,被利用,所以说过于单纯未必是件好事。人最好的境界,不是单纯也不是精明复杂。而是居中,有一颗单纯的内心,而又有一颗玲珑智慧的心。前者愉悦精神领域,后者保证你作为人的生存能力。

  • 2008年北京奥运会圣火是谁点燃的(2008年北京奥运会圣火点燃者介绍)

    2008年北京奥运会圣火是谁点燃的2008年奥运圣火最后点燃的人是体操王子李宁,2008年第29届北京奥运会主火炬手也是最后的火炬手。李宁,壮族,男,生于1963年3月10日,奥运冠军,原中国著名体操队运动员,家乡广西壮族自治区来宾市兴宾区南泗乡人,祖籍广东省佛山市顺德区,曾祖父辈迁至广西谋生,中国著名男子体操运动员。北京奥运会火炬手:北京奥运会火炬手是“和谐之旅”的实践者。

  • 饺子怎么煮不破皮(煮饺子不破皮的技巧)

    饺子怎么煮不破皮?接下来我们就一起去研究一下吧!饺子怎么煮不破皮火候:煮速冻饺子的时候,不宜用大火,它不像是新鲜的水饺,用大火煮也不易破皮。不要过早放,否则易粘在一起,而且放入后,要充分搅拌,这样就不会因为粘在一起而破皮。

  • 舍利子为什么很珍贵(舍利子究竟是什么)

    而另一种舍利子,指的是佛教修行者去世之后留下的遗体,有时是特指骨灰或骨灰中出现的结晶。全身舍利也被称为肉身菩萨。舍利子被认为是佛教修行者通过长年修行,深受戒定慧熏修所得,是修持水平的一个见证,十分难得。此外,也有推测认为牙齿也有可能在燃烧过程中形成舍利子。以此看来,似乎舍利子就是由骨骼形成的可能性十分高。