目录
1.浮点型除法精确计算
来自https://blog.csdn.net/h4x0r_007/article/details/45171141
1. BigDecimal初始化小数时,尽量用字符串形式,例如new BigDecimal("0.1");
2. BigDecimal类型变量比较大小时用compareTo方法,判断变量值是否为0,与BigDecimal.ZERO比较大小。
3. BigDecimal作除法时,除了要考虑除数是否为0,更要考虑是否能除尽的问题,直接调用BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)方法做除法可以避免除不尽的问题。
2.轧差
一种除不尽的解决方法。如1除以3,得0.3333........,是一个循环小数。不能直接存储这种数,否则会造成精度丢失(浮点型)。
int n = 3;//除数
BigDecimal bigDecimal = new BigDecimal("1");
BigDecimal a = bigDecimal.divide(new BigDecimal(n + ""), 1, BigDecimal.ROUND_HALF_UP);
BigDecimal has = a.multiply(new BigDecimal((n - 1) + ""));
BigDecimal b = bigDecimal.subtract(has);
Log.d("test123", a + "," + b);
2019-04-16 23:44:16.417 8191-8191/cn.xd.study D/test123: 0.3,0.4
1、2:0.3 ,3:0.4
前面的n-1笔四舍五入,最后一笔为剩余的数值。
3.Toast显示不正常,如:上下边距不同。
解决办法:传入整个应用的context。
自定义一个Application。
public class AppContext extends Application {
private static AppContext appContext;
@Override
public void onCreate() {
super.onCreate();
appContext = this;
}
public static AppContext getAppContext() {
return appContext;
}
}
在AndroidManifest中启用。
<application
..........
android:name=".AppContext"
android:theme="@style/AppTheme">
使用
Toast.makeText(AppContext.getAppContext(), "信息", Toast.LENGTH_SHORT).show();
4.打开图片的intent
注意授权
Intent intent = new Intent(Intent.ACTION_VIEW); intent.addCategory("android.intent.category.DEFAULT");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//授权
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri uri = FileProvider.getUriForFile(context, "com.chen.ezifn.FileProvider", file);
intent.setDataAndType(uri, "image/*");
startActivity(intent);
5.华为v20 http请求报错not permitted by network security policy
原因:限制了明文流量的网络请求。
默认情况下启用网络传输层安全协议 (TLS)
如果您的应用以 Android 9 或更高版本为目标平台,则默认情况下 isCleartextTrafficPermitted() 函数返回 false。 如果您的应用需要为特定域名启用明文,您必须在应用的网络安全性配置中针对这些域名将 cleartextTrafficPermitted 显式设置为 true
解决方法:
1.在res文件中创建xml目录,并在此文件中创建network_config.xml 文件。
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
2.在AndroidManifest中使用。
<application
................
android:networkSecurityConfig="@xml/network_config"
>
</application>
6.Retrofit修改User-Agent
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request()
.newBuilder()
.removeHeader("User-Agent")//移除旧的
.addHeader("User-Agent", “do.........”)//添加真正的头部
.build();
return chain.proceed(request);
}
}).build();
retrofit = new Retrofit.Builder()
.client(client)
.baseUrl(Address.DEVELOPMENT_HOST_ADDRESS)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
本文探讨了浮点型除法的精确计算方法,利用BigDecimal类实现无误差运算,介绍了轧差技巧处理除不尽问题。同时,解决了Toast显示异常、图片intent打开、华为设备HTTP请求错误及Retrofit自定义User-Agent等常见编程难题。
浮点型除法精确计算 、not permitted by network security policy、Retrofit修改User-Agent&spm=1001.2101.3001.5002&articleId=89319855&d=1&t=3&u=22988f7a7b9c4e769532e96c62e03022)
8086

被折叠的 条评论
为什么被折叠?



