Skip to content

Commit 850b5b3

Browse files
committed
修复金额精度变化的问题
1 parent 42799f7 commit 850b5b3

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.chaychan.viewlib;
2+
3+
4+
import android.animation.TypeEvaluator;
5+
6+
import java.math.BigDecimal;
7+
8+
class BigDecimalEvaluator implements TypeEvaluator {
9+
@Override
10+
public Object evaluate(float fraction, Object startValue, Object endValue) {
11+
BigDecimal start = (BigDecimal) startValue;
12+
BigDecimal end = (BigDecimal) endValue;
13+
BigDecimal result = end.subtract(start);
14+
return result.multiply(new BigDecimal("" + fraction)).add(start);
15+
}
16+
}

viewlib/src/main/java/com/chaychan/viewlib/NumberRunningTextView.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import com.chaychan.viewlib.utils.StringUtils;
1111

12+
import java.math.BigDecimal;
1213
import java.text.DecimalFormat;
1314

1415
/**
@@ -97,19 +98,20 @@ private void useAnimByType(String str) {
9798
public void playMoneyAnim(String moneyStr) {
9899
String money = moneyStr.replace(",", "").replace("-", "");//如果传入的数字已经是使用逗号格式化过的,或者含有符号,去除逗号和负号
99100
try {
100-
float finalFloat = Float.parseFloat(money);
101+
BigDecimal bigDecimal = new BigDecimal(money);
102+
float finalFloat = bigDecimal.floatValue();
101103
if (finalFloat < minMoney) {
102104
//如果传入的为0,则直接使用setText()
103105
setText(moneyStr);
104106
return;
105107
}
106-
ValueAnimator floatAnimator = ValueAnimator.ofFloat(0, finalFloat);
108+
ValueAnimator floatAnimator = ValueAnimator.ofObject(new BigDecimalEvaluator(),new BigDecimal(0), bigDecimal);
107109
floatAnimator.setDuration(duration);
108110
floatAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
109111
@Override
110112
public void onAnimationUpdate(ValueAnimator animation) {
111-
float currentNum = (float) animation.getAnimatedValue();
112-
String str = formatter.format(Double.parseDouble(String.valueOf(currentNum)));//格式化成两位小数
113+
BigDecimal currentNum = (BigDecimal) animation.getAnimatedValue();
114+
String str = formatter.format(Double.parseDouble(currentNum.toString()));//格式化成两位小数
113115
// 更新显示的内容
114116
if (useCommaFormat) {
115117
//使用每三位数字一个逗号的格式

0 commit comments

Comments
 (0)