对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 ...
随机推荐
- Android 线程优先级
对于Android平台上的线程优先级设置来说可以处理很多并发线程的阻塞问题,比如很多无关紧要的线程会占用大量的CPU时间,虽然通过了MultiThread来解决慢速I/O但是合理分配优先级对于并发编程 ...
- Android批量插入数据到SQLite数据库
Android中在sqlite插入数据的时候默认一条语句就是一个事务,因此如果存在上万条数据插入的话,那就需要执行上万次插入操作,操作速度可想而知.因此在Android中插入数据时,使用批量插入的方式 ...
- [转]ASP.NET MVC 入门8、ModelState与数据验证
ViewData有一个ModelState的属性,这是一个类型为ModelStateDictionary的ModelState类型的字典集合.在进行数据验证的时候这个属性是比较有用的.在使用Html. ...
- [Jacky] 解决Ext.Net GridPanel 选择的行数据刷新后不能获取最新值
选择GridPanel中一行数据,当变更数据时并重新刷新之后不能获取最新值,需通过如下方式获取: var internalId = gridPanel.getSelectionModel().getL ...
- javaweb之servlet 全解
①Servlet概述 ⑴什么是Servlet Servlet是JavaWeb的三大组件之一,它属于动态资源.Servlet的作用是处理请求, 服务器会把接收到的请求交给Servlet来处理,在Serv ...
- Java和C++的区别
这是一个Java语言和C++语言之间的比较. 目录 [隐藏] 1 设计目标 2 语言特性 2.1 语法 2.2 语义 2.3 资源管理 2.4 库 2.5 运行时 2.6 模板 vs. 泛型 2.7 ...
- NOIP2000 单词接龙
题三. 单词接龙 (27分) 问题描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的 ...
- sed写的命令收集
1. 替换一行字符串. <title name= > <param name="root", value="haha"/> <pa ...
- redis命令之lrange
LRANGE key start stop Related commands BLPOP BRPOP BRPOPLPUSH LINDEX LINSERT LLEN LPOP LPUSH LPUSHX ...
- glusterfs repo
Installing Gluster For RPM based distributions, if you will be using InfiniBand, add the glusterfs R ...