版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_35192370/article/details/82186434
先说下我遇到的问题:
App做调用微信充值功能,输入框明明输入的是0.57,但是调用微信支付的时候却成了0.56
一脸懵逼...
查原因:
拿到输入框中的内容, 转换成double类型后 乘以 100,通过log 发现 变成了 56.999999999
(计算过程中 计算机转化成二进制计算会产生一些失精)
然后强转成 int 类型就变成了 56,调用微信的时候api传参是要 单位为分的
问了主管用:
BigDecimal
封装了工具类:
package com.temiao.jiansport.utils;
import java.math.BigDecimal;
/**
* ==================================
* Created by 边江洲 on 2018/8/29.
* 作 者:WY_BJZ
* 创建时间:2018/8/29
* ==================================
*/
/*
类 说 明:
运算工具类
解决运算过程中的失精问题(二进制产生)
参数描述:
*/
public class TMCalculateUtil {
/* 加法 */
public static double jia(double value1, double value2) {
BigDecimal b1 = new BigDecimal(Double.toString(value1));
BigDecimal b2 = new BigDecimal(Double.toString(value2));
return b1.add(b2).doubleValue();
}
public static int jia(int value1, int value2) {
BigDecimal b1 = new BigDecimal(Double.toString(value1));
BigDecimal b2 = new BigDecimal(Double.toString(value2));
return b1.add(b2).intValue();
}
public static float jia(float value1, float value2) {
BigDecimal b1 = new BigDecimal(Double.toString(value1));
BigDecimal b2 = new BigDecimal(Double.toString(value2));
return b1.add(b2).floatValue();
}
/* 减法(第一个数减第二个数) */
public static double jian(double value1, double value2) {
BigDecimal b1 = new BigDecimal(Double.toString(value1));
BigDecimal b2 = new BigDecimal(Double.toString(value2));
return b1.subtract(b2).doubleValue();
}
public static int jian(int value1, int value2) {
BigDecimal b1 = new BigDecimal(Double.toString(value1));
BigDecimal b2 = new BigDecimal(Double.toString(value2));
return b1.subtract(b2).intValue();
}
public static float jian(float value1, float value2) {
BigDecimal b1 = new BigDecimal(Double.toString(value1));
BigDecimal b2 = new BigDecimal(Double.toString(value2));
return b1.subtract(b2).floatValue();
}
/* 乘法 */
public static double cheng(double value1, double value2) {
BigDecimal b1 = new BigDecimal(Double.toString(value1));
BigDecimal b2 = new BigDecimal(Double.toString(value2));
return b1.multiply(b2).doubleValue();
}
public static int cheng(int value1, int value2) {
BigDecimal b1 = new BigDecimal(Double.toString(value1));
BigDecimal b2 = new BigDecimal(Double.toString(value2));
return b1.multiply(b2).intValue();
}
public static float cheng(float value1, float value2) {
BigDecimal b1 = new BigDecimal(Double.toString(value1));
BigDecimal b2 = new BigDecimal(Double.toString(value2));
return b1.multiply(b2).floatValue();
}
/* 除法(第一个数除以第二个数) */
public static double chu(double value1, double value2) {
BigDecimal b1 = new BigDecimal(Double.toString(value1));
BigDecimal b2 = new BigDecimal(Double.toString(value2));
return b1.divide(b2).doubleValue();
}
public static int chu(int value1, int value2) {
BigDecimal b1 = new BigDecimal(Double.toString(value1));
BigDecimal b2 = new BigDecimal(Double.toString(value2));
return b1.divide(b2).intValue();
}
public static float chu(float value1, float value2) {
BigDecimal b1 = new BigDecimal(Double.toString(value1));
BigDecimal b2 = new BigDecimal(Double.toString(value2));
return b1.divide(b2).floatValue();
}
}
调用方法:
TMCalculateUtil.cheng(Utils.getDouble(inputFee)
好吧,小费了了一些时间处理了///