如何实现点击按钮累加TextView中的小数作为积分?
问题分析与修复方案
嘿,这个问题我太熟啦!你现在遇到的是典型的字符串与数值的类型混淆问题——你代码里把「已保存的积分(float类型)」和「TextView取出的字符串」直接用+拼接,Java会自动把float转成字符串做拼接操作,而不是数值加法,这就导致了0.3→0.33→0.333这种奇怪的结果。
修复步骤拆解
要解决这个问题,核心是先把TextView里的字符串转成浮点数值,再和已有的积分做数值加法,步骤如下:
- 将TextView获取到的字符串转换为
float类型 - 取出当前已保存的积分值
- 把两个浮点数值相加得到新积分
- 将新积分保存回去
修正后的完整代码
// 1. 从TextView获取字符串并转成float String getgPoints = points.getText().toString(); float addPoints = Float.parseFloat(getgPoints); // 2. 获取当前已保存的积分 float currentPoints = getPoints(preview.this); // 3. 计算新的积分(数值加法,不是字符串拼接) float newPoints = currentPoints + addPoints; // 4. 保存新积分 SharedPreferences data = getSharedPreferences("你的存储名称", MODE_PRIVATE); data.edit().putFloat("count", newPoints).apply();
额外注意事项
为了避免TextView内容不是合法小数时崩溃,建议加上异常捕获:
String getgPoints = points.getText().toString(); float addPoints = 0f; try { addPoints = Float.parseFloat(getgPoints); } catch (NumberFormatException e) { // 处理非法数值的情况,比如提示用户输入有误 e.printStackTrace(); } float currentPoints = getPoints(preview.this); float newPoints = currentPoints + addPoints; SharedPreferences data = getSharedPreferences("你的存储名称", MODE_PRIVATE); data.edit().putFloat("count", newPoints).apply();
内容的提问来源于stack exchange,提问作者binoe
相关产品推荐
相关产品推荐

