HarmonyOS 鸿蒙Next number 求和的显示

发布于 1周前 作者 zlyuanteng 来自 鸿蒙OS

HarmonyOS 鸿蒙Next number 求和的显示 第一次求和:0.2

第二次求和,这是个什么问题呢?

5 回复

要理解这个得了解内存中是如何保存浮点数的,简单点说,内存只有位的概念,人为规定了字节,全字,双字之类的用于保存数据或控制代码;而浮点数通常两种规格,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);
  }
}

在这个示例中,我们定义了两个状态变量 num1num2,分别表示两个数字。sum 状态变量用于存储求和的结果。通过 Button 组件的 onClick 事件,我们计算 num1num2 的和,并将结果赋值给 sum。最后,使用 Text 组件显示 num1num2sum 的值。

在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);
}

这段代码会输出每对相邻数字的和。你可以根据实际需求调整代码逻辑。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!