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

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

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

基础数据类型的相互转换在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步,头发慢慢变顺,发量也变多了。这样做的时间久了自然会造成发质过干,从而导致坚韧度下降的情况。但是刚刚洗完头,这个时候头发是比较粗糙不柔顺的,如果用普通的梳子梳的话,很可能会造成头发损伤的情况。

  • 孙过庭草书书谱全集讲解(孙过庭书谱的书法艺术特色研究)

    唐朝时,我国书法艺术审美观已初步形成。孙过庭认为,书法和文学一样有着教化功能,这一点在其《书谱》中有所体现。唐太宗对书法表现出极大热情,对王羲之的书法更是十分青睐。孙过庭在创作《书谱》时便取法于王羲之、王献之,并对“二王”的书法大力赞扬。孙过庭认为情绪会影响书法创作效果,应在书法创作前及创作过程中进行心理调节,将创作者主观因素置于首位。孙过庭利用龙泉之利、美女之容,来强调欣赏者必须拥

  • 狗认为自己是狗吗(狗是否知道自己是狗呢)

    兽医小明也粗略统计了一下,觉得狗知道自己是狗的铲屎官占了三成,而觉得狗不知道自己是狗的铲屎官占了七成。听网友们的说法,好像都挺有理有据的,如果让兽医小明来回答这个问题的话,可能会偏向于狗并不知道自己是狗这个答案。明明教过它很多遍,不允许往床上跑,明明它也有自己的窝。图片来源于网络,如有疑问可以联系兽医小明。如果有宠物健康和养宠问题,关注兽医小明进行咨询。

  • 蓝鸟中控怎样拆下来(日产蓝鸟拆卸及安装导航的步骤)

    蓝鸟中控怎样拆下来我们拆下日产蓝鸟车上的CD机,一般都是有几个内饰板扣着螺丝,把内饰板翘下来就能看见螺丝了。螺丝拆掉以后,轻轻的把cd机拿出来,后面有两个插头,掰开卡子,把线束和cd机分离开来。立着放是因为这种情况下信号最好。然后按照原来的方式,再把螺丝拧上去,内饰板扣上去,就可以了。

  • 孽字的来历(孽字的由来)

    孽,庶子也——《说文》段注:“凡木萌旁出皆曰蘖,人之支子曰孽,其义略同”,我来为大家科普一下关于孽字的来历?下面希望有你要的答案,我们一起来看看吧!商君者,魏之庶孽公子也。——《史记·商君书》独孤臣孽子,其操心也危,其虑患也深,故达。——《孟子·尽心上》

  • 荒野大镖客2斑纹纯血马怎么刷(荒野大镖客2花斑纯血马)

    荒野大镖客2斑纹纯血马怎么刷?斑纹纯血马在前期通常是不能获取的,但总有些机会可以利用,下面小编就带来荒野大镖客2斑纹纯血马速刷心得,一起来看看吧。荒野大镖客2斑纹纯血马速刷心得瓦伦丁西南边有个父亲带着孩子修房子,这个地点为起点,终点是草莓镇东南边的阿普尔西德木材公司,就在这两个点之间来回,就会遇到一伙奥德里斯科帮的家伙。没解锁东部传奇背包的时候是刷不出来的。

  • 香蕉致命病菌扩散全球(辟谣关于香蕉传播新型肺炎)

    今天一早,小编的舅妈在家庭群转发一张图片,告诉我们不能吃香蕉了,否则会感染新型肺炎病毒。最后,这一次的病毒主要来源,是非法销售的野生动物。除了“新型肺炎病毒是由香蕉导致的”消息是假的,还有一个普遍的误区是“香蕉最通便”。另外,鞣酸还会影响铁、钙、镁等微量元素的吸收。如果是还没有麻点、表皮金黄的香蕉,虽然看起来好吃,也尝不出涩味了,但鞣酸的成分仍然存在。此外,最好不要用水果榨汁来补充膳食纤维。

  • 吃藕粉的好处 女人天天吃藕粉的好处

    藕粉味甘性平,能治热渴,散留血,开胃。《本草纲目》还记载,藕粉服食,轻身益年。

  • 小米cc9pro出厂带贴膜吗(小米 cc9 pro用贴膜吗)

    小米cc9pro出厂是没有贴膜的,但手机使用的是高硬度玻璃,具有很强的耐磨性,可以放心使用。

  • 认认真真的意思是什么(认认真真意思介绍)

    接下来我们就一起去研究一下吧!认认真真的意思是什么认认真真释义:形容做一件事非常的认真,仔仔细细的,一点也不马虎。认真是被动按规矩办事情,细心是主动按智力办事情,认真不一定细心,细心一定认真。