提交 850b5b3f 编写于 作者: C chaychan

修复金额精度变化的问题

上级 42799f70
package com.chaychan.viewlib;
import android.animation.TypeEvaluator;
import java.math.BigDecimal;
class BigDecimalEvaluator implements TypeEvaluator {
@Override
public Object evaluate(float fraction, Object startValue, Object endValue) {
BigDecimal start = (BigDecimal) startValue;
BigDecimal end = (BigDecimal) endValue;
BigDecimal result = end.subtract(start);
return result.multiply(new BigDecimal("" + fraction)).add(start);
}
}
\ No newline at end of file
...@@ -9,6 +9,7 @@ import android.widget.TextView; ...@@ -9,6 +9,7 @@ import android.widget.TextView;
import com.chaychan.viewlib.utils.StringUtils; import com.chaychan.viewlib.utils.StringUtils;
import java.math.BigDecimal;
import java.text.DecimalFormat; import java.text.DecimalFormat;
/** /**
...@@ -97,19 +98,20 @@ public class NumberRunningTextView extends TextView { ...@@ -97,19 +98,20 @@ public class NumberRunningTextView extends TextView {
public void playMoneyAnim(String moneyStr) { public void playMoneyAnim(String moneyStr) {
String money = moneyStr.replace(",", "").replace("-", "");//如果传入的数字已经是使用逗号格式化过的,或者含有符号,去除逗号和负号 String money = moneyStr.replace(",", "").replace("-", "");//如果传入的数字已经是使用逗号格式化过的,或者含有符号,去除逗号和负号
try { try {
float finalFloat = Float.parseFloat(money); BigDecimal bigDecimal = new BigDecimal(money);
float finalFloat = bigDecimal.floatValue();
if (finalFloat < minMoney) { if (finalFloat < minMoney) {
//如果传入的为0,则直接使用setText() //如果传入的为0,则直接使用setText()
setText(moneyStr); setText(moneyStr);
return; return;
} }
ValueAnimator floatAnimator = ValueAnimator.ofFloat(0, finalFloat); ValueAnimator floatAnimator = ValueAnimator.ofObject(new BigDecimalEvaluator(),new BigDecimal(0), bigDecimal);
floatAnimator.setDuration(duration); floatAnimator.setDuration(duration);
floatAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { floatAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override @Override
public void onAnimationUpdate(ValueAnimator animation) { public void onAnimationUpdate(ValueAnimator animation) {
float currentNum = (float) animation.getAnimatedValue(); BigDecimal currentNum = (BigDecimal) animation.getAnimatedValue();
String str = formatter.format(Double.parseDouble(String.valueOf(currentNum)));//格式化成两位小数 String str = formatter.format(Double.parseDouble(currentNum.toString()));//格式化成两位小数
// 更新显示的内容 // 更新显示的内容
if (useCommaFormat) { if (useCommaFormat) {
//使用每三位数字一个逗号的格式 //使用每三位数字一个逗号的格式
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册