HarmonyOS 鸿蒙Next number 求和的显示
HarmonyOS 鸿蒙Next number 求和的显示 第一次求和:0.2
第二次求和,这是个什么问题呢?
要理解这个得了解内存中是如何保存浮点数的,简单点说,内存只有位的概念,人为规定了字节,全字,双字之类的用于保存数据或控制代码;而浮点数通常两种规格,float 和 double,一个32位一个64位;如果按普通二进制数理解全是整数,人为地将这32位或64位划分三个个区域,一位符号,一部分表示指数一部分表示小数,指数部分是以2为底,小数部分有点绕,举个简单的例子:假设一个浮点数占用1字节,规定首位为符号(s),剩下7位3位是指数(e),4位表示小数(f),它实际表示值是:value = (-1)^s * f * 2^e;规定 f 是0.xxxx格式,其中每个x为一位二进制数;如有一个这样的二进制编码格式表示的小数 01011010,符号0为正,前面是指数5(101),后面是1/2+1/8=5/8 = 0.625,所以这个二进制转成十进制即:
+0.625 * 2^5 = 20。如果仔细一想,其实计算机这种方式表示的小数部分是有很多不能表示的小数的,因为它的小数只能是1/2+1/4+1/8+…1/2^N,其中每个1/2^N只能是有或无,这样很多小数是无法精确表示的,所以浮点数是不精确的,但在精度要求有限的情况下足够用了;要更精细说明可参考《深入理解计算机系统》第二章-信息的表示和处理;目前IEEE标准规定float和double对32位和64位划分的方式分别是:
float: s(1)e(8)f(23); double: s(1)e(11)f(52) //数字代表占用位数
回到你看到的问题,你再想想你赋值给变量0.1,它在内存中表示可能是 0[0000…00][00011…],两个括号分别为指数和小数部分,其实理论上可能是无法用上述二进制小数准确表示0.1的,但按上述方式近似表示时0.1, 0.2都可显示不会有尾部的更小的尾数;但到0.3的时候,估计系统没法子了,不精确的本质盖不住了,只能把内存中实际的结果显示出来,就出现你看到的突兀地显示出多出的很小的小数尾数。
希望简单解释明白了系统中实际发生了什么,导致这种问题出现。
更多关于HarmonyOS 鸿蒙Next number 求和的显示的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
那么有什么方法可以来消除浮点数吗?
取整方法:Math.floor(data)
四舍五入:Math.round(data)
各种转换看JS语言参考及常用函数。
在HarmonyOS中,实现数字求和并显示的功能可以通过使用ArkTS语言编写。以下是一个简单的示例代码,展示如何在鸿蒙Next中实现数字求和并显示结果:
import { Component, State, Text } from '@ohos.arkui';
@Component
struct SumDisplay {
@State private num1: number = 5;
@State private num2: number = 10;
@State private sum: number = 0;
build() {
Column() {
Text(`Number 1: ${this.num1}`)
.fontSize(20)
.margin(10);
Text(`Number 2: ${this.num2}`)
.fontSize(20)
.margin(10);
Text(`Sum: ${this.sum}`)
.fontSize(20)
.margin(10);
Button('Calculate Sum')
.onClick(() => {
this.sum = this.num1 + this.num2;
})
.margin(10);
}
.padding(20)
.width('100%')
.height('100%')
.justifyContent(FlexAlign.Center);
}
}
在这个示例中,我们定义了两个状态变量 num1
和 num2
,分别表示两个数字。sum
状态变量用于存储求和的结果。通过 Button
组件的 onClick
事件,我们计算 num1
和 num2
的和,并将结果赋值给 sum
。最后,使用 Text
组件显示 num1
、num2
和 sum
的值。
在HarmonyOS(鸿蒙)中,如果你想要实现“Next number 求和”的功能,可以通过编写简单的代码来实现。假设你有一个数字列表,并希望计算每个数字与其下一个数字的和,可以使用以下示例代码:
int[] numbers = {1, 2, 3, 4, 5};
for (int i = 0; i < numbers.length - 1; i++) {
int sum = numbers[i] + numbers[i + 1];
System.out.println("Sum of " + numbers[i] + " and " + numbers[i + 1] + " is: " + sum);
}
这段代码会输出每对相邻数字的和。你可以根据实际需求调整代码逻辑。