You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SharedPreferences中保存可累加的十进制数?

嘿,这个需求很好解决!原来你用SharedPreferences的putInt()存整数积分,现在要支持十进制数(也就是浮点数)的话,SharedPreferences本身就提供了对应的存储方法,下面给你两种实用方案:

方案1:直接用浮点类型存储(适合大多数积分场景)

SharedPreferences支持float类型的存储和读取,用putFloat()和getFloat()就能搞定,步骤如下:

  1. 修改变量类型:把原来的int pointsAmount改成float pointsAmount(如果需要更高精度也可以用double,但注意SharedPreferences没有直接的putDouble(),要么转成float,要么用后面的字符串存储方案)。
  2. 累加十进制积分:比如你要加10.5积分,就写pointsAmount += 10.5;
  3. 格式化显示:为了避免显示杂乱的小数位,用String.format()控制格式,比如保留1位小数:
    pointsAvailable.setText(String.format("C.%.1f", pointsAmount));
    
  4. 保存到SharedPreferences:替换原来的putInt()为putFloat(),另外推荐用apply()代替commit()——apply()是异步操作,不会阻塞主线程,更高效:
    SharedPreferences saveCoins = this.getSharedPreferences("mySaverCoins", Context.MODE_PRIVATE);
    saveCoins.edit().putFloat("points_amount", pointsAmount).apply();
    
  5. 读取保存的值:在应用启动时读取,用getFloat(),第二个参数是默认值(比如0.0f):
    SharedPreferences saveCoins = this.getSharedPreferences("mySaverCoins", Context.MODE_PRIVATE);
    float pointsAmount = saveCoins.getFloat("points_amount", 0.0f);
    pointsAvailable.setText(String.format("C.%.1f", pointsAmount));
    

方案2:用整数存储(避免浮点精度误差,适合精确计算场景)

如果你的积分涉及到非常精确的计算(比如和金钱挂钩),浮点类型可能会有精度丢失的问题(比如0.1+0.2不等于0.3)。这时候可以把十进制数转成整数存储,比如把积分乘以10(保留1位小数)或者100(保留2位小数),读取的时候再转回来:

  1. 保存时转成整数:
    // 假设pointsAmount是10.5,转成整数105
    int pointsInUnits = (int) (pointsAmount * 10);
    SharedPreferences saveCoins = this.getSharedPreferences("mySaverCoins", Context.MODE_PRIVATE);
    saveCoins.edit().putInt("points_in_units", pointsInUnits).apply();
    
  2. 读取时转回十进制:
    SharedPreferences saveCoins = this.getSharedPreferences("mySaverCoins", Context.MODE_PRIVATE);
    int pointsInUnits = saveCoins.getInt("points_in_units", 0);
    float pointsAmount = pointsInUnits / 10.0f;
    pointsAvailable.setText(String.format("C.%.1f", pointsAmount));
    

小提醒

  • 原来的键名是"C.",建议换成更清晰的名字(比如"points_amount"),避免混淆和后续维护问题。
  • 如果用double类型,也可以转成字符串存储(用putString()和getString()),读取时再用Double.parseDouble()转回来,这样精度更高。

内容的提问来源于stack exchange,提问作者everjoym

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:48:55