AI智能
改变未来

Android Studio 安卓开发学习—商业数字运算,不同的Activity的传值问题


1.商业数字运算

这一部分其实属于Java
在一些情况下,我们需要用到double类型的数字进行计算,然而double运算时会有精度缺失。
在《Effective Java》这本书中也提到这个原则,float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用 java.math.BigDecimal。原则是使用BigDecimal并且一定要用String来够造。

import java.math.BigDecimal;/*** 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精* 确的浮点数运算,包括加减乘除和四舍五入。*/public class Arith{//默认除法运算精度private static final int DEF_DIV_SCALE = 10;//这个类不能实例化private Arith(){}/*** 提供精确的加法运算。* @param v1 被加数* @param v2 加数* @return 两个参数的和*/public static double add(double v1,double v2){BigDecimal b1 = new BigDecimal(Double.toString(v1));BigDecimal b2 = new BigDecimal(Double.toString(v2));return b1.add(b2).doubleValue();}/*** 提供精确的减法运算。* @param v1 被减数* @param v2 减数* @return 两个参数的差*/public static double sub(double v1,double v2){BigDecimal b1 = new BigDecimal(Double.toString(v1));BigDecimal b2 = new BigDecimal(Double.toString(v2));return b1.subtract(b2).doubleValue();}/*** 提供精确的乘法运算。* @param v1 被乘数* @param v2 乘数* @return 两个参数的积*/public static double mul(double v1,double v2){BigDecimal b1 = new BigDecimal(Double.toString(v1));BigDecimal b2 = new BigDecimal(Double.toString(v2));return b1.multiply(b2).doubleValue();}/*** 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到* 小数点以后10位,以后的数字四舍五入。* @param v1 被除数* @param v2 除数* @return 两个参数的商*/public static double div(double v1,double v2){return div(v1,v2,DEF_DIV_SCALE);}/*** 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指* 定精度,以后的数字四舍五入。* @param v1 被除数* @param v2 除数* @param scale 表示表示需要精确到小数点以后几位。* @return 两个参数的商*/public static double div(double v1,double v2,int scale){if(scale<0){throw new IllegalArgumentException(\"The scale must be a positive integer or zero\");}BigDecimal b1 = new BigDecimal(Double.toString(v1));BigDecimal b2 = new BigDecimal(Double.toString(v2));return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();}/*** 提供精确的小数位四舍五入处理。* @param v 需要四舍五入的数字* @param scale 小数点后保留几位* @return 四舍五入后的结果*/public static double round(double v,int scale){if(scale<0){throw new IllegalArgumentException(\"The scale must be a positive integer or zero\");}BigDecimal b = new BigDecimal(Double.toString(v));BigDecimal one = new BigDecimal(\"1\");return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();}};

2.不同的Activity传值

在第一个Activity中,创建Intent对象,表明要传值的目标。

Intent intent = new Intent(BuyingFoodInShuiYunActivity.this, CheckBillActivity.class);intent.putExtra(\"food\",checked_food);intent.putExtra(\"summary_price\",summary_money+\"\");startActivity(intent);

intent.putExtra() 函数可以传递不同的数据类型
如果需要传自创的数据类型,则一定要将该类实现Serializable借口,并且在接收数据的Activity中强制类型转换。

//接收数据Intent intent = getIntent();//数据存放到checked_food中checked_food = (ArrayList<FoodContentBean>)intent.getSerializableExtra(\"food\");//summary_money接受字符串类型的数据summary_money = intent.getStringExtra(\"summary_price\");
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Android Studio 安卓开发学习—商业数字运算,不同的Activity的传值问题