HarmonyOS鸿蒙Next中小数点怎么存入本地关系型数据库

HarmonyOS鸿蒙Next中小数点怎么存入本地关系型数据库 小数点怎么存入关系型数据库,比如99999.99,字段应该怎么写,别是字符串

7 回复

选择数据类型

  • DOUBLE:双精度浮点型,适合常规场景
  • FLOAT:单精度浮点型,适合存储空间敏感场景
CREATE TABLE Sales (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    price DOUBLE NOT NULL,  -- 使用双精度类型
    amount FLOAT            -- 使用单精度类型
)
const price: number = 99999.99;
await rdbStore.executeSql("INSERT INTO Sales(price) VALUES(?)", [price]);

更多关于HarmonyOS鸿蒙Next中小数点怎么存入本地关系型数据库的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


NUMERIC:用于存储数值数据,自动选择存储方式。适合储存的值可能是整数也可能是浮点数

灵活性:NUMERIC类型可以存储整数或浮点数,具有较高的灵活性。

自动选择存储方式:SQLite会根据实际存储的值自动选择最合适的存储方式,例如,如果存储的是整数,则以INTEGER方式存储;如果存储的是浮点数,则以REAL方式存储。

适用场景:适用于需要存储精确数值的场景,如财务数据、测量值等。

Float: 单精度浮点数,可以存储约7位十进制数。

  • Double: 双精度浮点数,可以存储约15位十进制数。
  • Decimal或Numeric: 定点数,可以精确表示任意大小和小数位数,适用于需要精确计算的情况。
  • 如果需要精确的金额或计数,建议使用Decimal类型。不同关系数据库系统,数据类型略有不同。

自带本地数据库呢,

real或numeric

在HarmonyOS Next中,使用关系型数据库存储小数点数据时,应使用REAL或DOUBLE类型字段。通过@Column注解标记为对应类型即可,例如:

@Column(name = "price", type = ColumnType.DOUBLE)
private double price;

或使用REAL类型:

@Column(name = "score", type = "score", type = ColumnType.REAL)
private float score;

这两种类型都适用于存储浮点数。写入时会自动进行类型转换,读取时也会保持小数精度。

在HarmonyOS Next的关系型数据库中存储小数点数据,推荐使用REAL或DOUBLE类型字段。以下是具体实现方案:

  1. 数据库表定义示例:
import { relationalStore } from '@ohos.data.relationalStore';

const STORE_CONFIG = {
  name: 'MyDatabase.db',
  securityLevel: relationalStore.SecurityLevel.S1
};

const SQL_CREATE_TABLE = `
  CREATE TABLE IF NOT EXISTS financial_data (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    amount REAL NOT NULL,  /* 使用REAL类型存储小数 */
    timestamp INTEGER
  )`;
  1. 数据操作示例:
// 插入数据
const valueBucket = {
  'amount': 99999.99, // 直接使用Number类型
  'timestamp': new Date().getTime()
};
await rdbStore.insert('financial_data', valueBucket);

// 查询数据
const predicates = new relationalStore.RdbPredicates('financial_data');
const resultSet = await rdbStore.query(predicates);
while(resultSet.goToNextRow()) {
  const amount = resultSet.getDouble(resultSet.getColumnIndex('amount')); // 获取Double值
  console.log(`金额:${amount}`);
}

注意事项:

  • REAL类型支持约15位有效数字
  • 对于精确计算场景(如金融),建议在应用层使用Decimal.js等库处理
  • 避免使用TEXT类型存储数值,会影响排序和计算性能

这种方案既保持了数值类型的高效计算特性,又能正确处理小数存储。

回到顶部