对bigDecimal的一些探索
一般直接用简单的double等来做浮点计算可能会因为计算机的浮点运算机制出现一点问题,不符合生活中的计算常识,于是java就给我们包装了大数据类,bigdecimal用于处理浮点数据类。当然也有处理整数的bigInteger类。
这个直接看下面的代码就行了。最好传入都用string,这样不会出什么问题,笔者曾经用long等出现问题。
package com.csshu; import java.math.BigDecimal; public class Test {
public static void main(String[] args) {
long a1 = 4096;
long a2 = 16;
long b1 = 24031232;
long b2 = 15491;
long c1 = 11292672;
long c2 = 13360;
long d1 = 4161536;
long d2 = 4928; Test t = new Test();
String a = t.computeSpeed(a1+"", a2);
String b = t.computeSpeed(b1+"", b2);
String c = t.computeSpeed(c1+"", c2);
String d = t.computeSpeed(d1+"", d2); String a0 = t.computeFileSize(a);
String b0 = t.computeFileSize(b);
String c0 = t.computeFileSize(c);
String d0 = t.computeFileSize(d); System.out.println(a0);
System.out.println(b0);
System.out.println(c0);
System.out.println(d0);
} /**
* 计算速度,以字节为单位返回
* @param size 文件大小 byte
* @param time 所用时间 millseconds
* @return
*/
public String computeSpeed(String size,long time){
String speed = "";
BigDecimal bd1 = new BigDecimal(size);
BigDecimal bd2 = new BigDecimal(time+""); // long直接传进来要出问题,5637可能变成5.637
bd2 = bd2.divide(new BigDecimal(1000+"")); // 变成以秒为单位
System.out.println(bd2.toString());
BigDecimal bd3 = bd1.divide(bd2, 2, BigDecimal.ROUND_HALF_EVEN);
speed = bd3.toString();
return speed;
} /**
* 计算文件大小,要求输入以byte为单位的大小。如果超过TB则返回""
* @param fileSize
* @return
*/
public String computeFileSize(String fileSize){
String fileSizeString = "";
BigDecimal bd1 = new BigDecimal(fileSize);
BigDecimal bd2 = new BigDecimal(1024);
double d = Double.valueOf(fileSize);
if(d < 1024){ // B
fileSizeString = fileSize+"B/s";
}else if(d < Math.pow(1024,2)){ // KB 1024B -1KB 1000
BigDecimal bd3 = bd1.divide(bd2,2,BigDecimal.ROUND_HALF_EVEN);
fileSizeString = bd3.toString()+"KB/s";
}else if(d < Math.pow(1024,3)){ // MB
BigDecimal bd3 = bd1.divide(bd2,2,BigDecimal.ROUND_HALF_EVEN);
fileSizeString = bd3.toString()+"KB/s";
}else if (d < Math.pow(1024,4)){ // GB
BigDecimal bd3 = bd1.divide(bd2,2,BigDecimal.ROUND_HALF_EVEN);
fileSizeString = bd3.toString()+"KB/s";
}
return fileSizeString;
}
}
对bigDecimal的一些探索的更多相关文章
- BigDecimal setScale()设置无效 scale()取得的值不是setScale()设置的值
最近查看rebate数据时,发现一个bug,主要现象是,当扣款支付宝的账号款项时,返回的是数字的金额为元,而数据库把金额存储为分,这中间要做元与分的转化,这个转化规则很简单,就是*100的,所以一开始 ...
- Elasticsearch 在地理信息空间索引的探索和演进
vivo 互联网服务器团队- Shuai Guangying 本文梳理了Elasticsearch对于数值索引实现方案的升级和优化思考,从2015年至今数值索引的方案经历了多个版本的迭代,实现思路从最 ...
- 【探索】机器指令翻译成 JavaScript
前言 前些时候研究脚本混淆时,打算先学一些「程序流程」相关的概念.为了不因太枯燥而放弃,决定想一个有趣的案例,可以边探索边学. 于是想了一个话题:尝试将机器指令 1:1 翻译 成 JavaScript ...
- 【探索】利用 canvas 实现数据压缩
前言 HTTP 支持 GZip 压缩,可节省不少传输资源.但遗憾的是,只有下载才有,上传并不支持.如果上传也能压缩,那就完美了.特别适合大量文本提交的场合,比如博客园,就是很好的例子. 虽然标准不支持 ...
- 探索C#之6.0语法糖剖析
阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...
- Mysql事务探索及其在Django中的实践(二)
继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...
- Linux学习之探索文件系统
Linux,一起学习进步- ls With it, we can see directory contents and determine a variety of important file ...
- 马里奥AI实现方式探索 ——神经网络+增强学习
[TOC] 马里奥AI实现方式探索 --神经网络+增强学习 儿时我们都曾有过一个经典游戏的体验,就是马里奥(顶蘑菇^v^),这次里约奥运会闭幕式,日本作为2020年东京奥运会的东道主,安倍最后也已经典 ...
- C++随笔:.NET CoreCLR之GC探索(4)
今天继续来 带大家讲解CoreCLR之GC,首先我们继续看这个GCSample,这篇文章是上一篇文章的继续,如果有不清楚的,还请翻到我写的上一篇随笔.下面我们继续: // Initialize fre ...
随机推荐
- STL总结之functor
STL中仿函数是重要的组成部分.所谓的仿函数就是通过重载括号运算符实现的, 如下: STL库中都是泛型仿函数如小于操作: STL中定义了许多有用的操作,如less(小于), less_equal(小于 ...
- UVA 1351 - String Compression
题意: 对于一个字符串中的重复部分可以进行缩写,例如"gogogo"可以写成"3(go)",从6个字符变成5个字符.."nowletsgogogole ...
- BILL.WEI]stimulsoft reports 中panel 妙用
我们在通过stimulsoft reports做报表,有的时候,我们需要通过合并报表的一些中间列元素,我们就可以用到panel组件 如下图,我们需要合并报表中间项,一般手段达不到要求,只能通过嵌套pa ...
- Cocos2d-x ios 下http请求的另一种实现
简单描述下需求:游戏要加入事件log,比如玩家升到10级:创建角色:或是,触发这些事件后要求客户端忘后台抛送一条log信息.一般情况下,我们可以直接使用cocos自带的HttpClient(底层用li ...
- 【原】计算机Tools vs 学习资料
今天,给大家推荐一些比较使用的软件,主要从免费和好用两个角度考虑. 首先推荐一个网址"http://tool.oschina.net/",上面有非常好用的小工具,可以极大的方便我们 ...
- wuzhicms发送邮件
//邮件发送 $config = get_cache('sendmail'); $siteconfigs = get_cache('siteconfigs'); $password = decode( ...
- 洛谷P1238 走迷宫
洛谷1238 走迷宫 题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个 ...
- HOG特征
HOG(Histogram of gradient)统计图像局部区域的梯度方向信息来作为该局部图像区域的表征.HOG特征具有以下几个特点: (1)不具有旋转不变性(较大的方向变化),实际应用中不变性是 ...
- weka 集成学习
import java.io.*;import weka.classifiers.*;import weka.classifiers.meta.Vote;import weka.core.Instan ...
- EGit插件安装(附Eclipse版本对应表)
最近eclipse添加egit插件,通过网上的方法下载安装后不显示git选项.通过官网了解到egit的版本对应相应的eclipse版本. 如果你安装了最新版本,需要先卸载重启eclipse后重新安装兼 ...