在公司写代码时,发现从mongodb中取出高精度数据时,会自动转成科学计数法!
例如数据库里存的是`0.0002`,取出来时,变成了2.0E-4.
对于这种高精度的数据,一般要用到BigDecimal类。
一般我们都是保留两位小数,但是如上例中,`0.0002`我们希望保留的有效位,是从非0位2开始
的。我们该怎么写呢?
double a = 0.0002;
BigDecimal b = new BigDecimal(String.valueOf(a));
BigDecimal divisor = BigDecimal.ONE;
MathContext mc = new MathContext(2);
System.out.println(b.divide(divisor, mc));
- 1
- 2
- 3
- 4
- 5
上面代码的意思:用一个`BigDecimal`对象除以`divisor`后的结果,并且要求这个结果保留
有mc个小数位。其中`BigDecimal.ONE`的值就是1。(0.0002/1保留2位有效小数)
尽量使用参数类型为String的构造函数。
这里要说明下:
不要写成这样:
double a = 0.0002;
BigDecimal b = new BigDecimal(String.valueOf(a));
BigDecimal setScale = bigDecimal.setScale(2);
System.out.println(setScale);
- 1
- 2
- 3
- 4
这样会保存会报错,因为它的保存方式不会去管,小数点后面的开始位是不是为0。假设它强行截
取得话(我们假设它不报错),就变成了0.00。就更不对啦
网上参考信息:
方法一:
scale指的是你小数点后的位数。比如123.456则score就是3.
score就是BigDecimal类中的方法啊。
你自己定义一个BigDecimal的对象调用一下就可以验证。
比如:BigDecimal b = new BigDecimal("123.456");
b.scale(),返回的就是3.
方法二:
roundingMode是小数的保留模式。它们都是BigDecimal中的常量字段,你可以看一下,有很
多种。
比如:BigDecimal.ROUND_HALF_UP表示的就是4舍5入。
`pubilc BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)`
的意思是说:我用一个BigDecimal对象除以divisor后的结果,并且要求这个结果保留有
scale个小数位,roundingMode表示的就是保留模式是什么,是四舍五入啊还是其它的,你可
以自己选!
如果我们后台不转换的话,放到前台转也可以的。前台使用Number(),就可以把科学计数表示法
转成正式显示
参考地址
http://bbs.csdn.net/topics/360022861
http://blog.csdn.net/jackiehff/article/details/8582449
http://blog.csdn.net/wangxy799/article/details/51769251
相关推荐
1. **Decimal类型**:这是专门为商业计算设计的高精度数据类型。在数据库层面,如MySQL或SQL Server,可以使用`decimal(M,N)`类型,其中`M`表示总位数,`N`表示小数位数。例如,`decimal(20,2)`可以存储最多20位数字...
它能够提供对非常大的数字以及需要高度精确的计算的支持,非常适合用于财务和商业计算场景。 ### `BigDecimal`类的基本用法 1. **构造方法**: - `BigDecimal(double val)`:通过一个`double`值创建`BigDecimal`...
在进行商业计算或者需要精确结果的场景中,推荐使用`BigDecimal`。例如,在相加、相减、相乘和相除操作时,可以将输入的浮点数先转换为字符串,然后用`BigDecimal`对象进行运算,最后再转换回`double`。示例代码如下...
在Java编程语言中,BigDecimal是用于处理高精度和可配置精度的十进制数的类。在进行商业计算时,由于浮点数(double和float)存在精度问题,不能保证准确的结果,因此通常推荐使用BigDecimal来确保计算的精确性。本文...
10. **数据类型**:理解并使用适当的Java数据类型,如`int`、`double`,确保计算的精度和范围。 综上所述,这个"java_calculator2"项目不仅展示了Java编程的基本概念,还可能涉及到了面向对象设计、异常处理、用户...
5. **距离和面积计算**:S2库提供了球面上的精确距离计算,即使在极地附近也能保持精度。同时,它还可以计算球面上的准确面积,克服了经纬度坐标系统在大范围区域计算时的不准确性。 6. **API友好**:S2库的Java...
总的来说,ACL大数计算提供了一种高效、灵活的方式来处理超出常规整型范围的大整数,使得在各种需要高精度计算的场景中能够实现准确无误的运算。无论是学术研究还是商业应用,ACL大数计算都是解决大数据问题的强大...
总之,Java中的BigDecimal类是处理精确数值计算的重要工具,尤其是在金融、会计等对精度要求极高的领域。通过使用其提供的各种构造方法和运算方法,开发者可以有效地控制计算过程中的精度,确保计算结果的正确性。...
在IT行业中,蓝牙定位是一种基于蓝牙技术的无线定位方法,尤其在室内环境中...开发这样的系统涉及蓝牙通信、信号处理、定位算法等多个技术领域,需要综合运用多种知识,但其潜在的商业价值和用户体验提升是值得投入的。
BigDecimal 类在 Java 中是用于处理高精度和大数值计算的,它确保了在计算过程中不会因为浮点数的精度问题而导致结果错误。由于 double 和 float 类型在处理大数或需要绝对精确计算的场景下存在精度损失,因此 ...
- 通用计算机:可以执行多种类型的计算任务,灵活性强,广泛应用于科学研究、商业计算等领域。 3. **计算机的应用领域**: - 科学计算:用于复杂的数学和物理计算。 - 自动控制:应用于工业生产线、智能家居等。...
7. `BigDecimal`和`DecimalFormat`:这两个类用于高精度的数值计算。`BigDecimal`解决了`double`类型的精度问题,适合金融和商业计算。`DecimalFormat`是格式化数字的工具,可以定制输出的格式。 8. `Math`类:提供...
一般的float型和Double型数据只可以用来做科学计算或者 是工程计算,由于在商业计算中,要求的数字精度比较高,所以要用到java.math.BigDecimal类,它支持任何精度的定点数,可以用它来精确 计算货币值。
并行程序开发工具与高性能程序库是现代计算领域的重要组成部分,尤其在大数据处理和高性能计算中扮演着不可或缺的角色。本文将详细介绍一个基础的并行计算概念——BLAS(Basic Linear Algebra Subroutines)及其在高...
`float`和`double`是最常用的两种浮点类型,其中`double`精度更高。 - **字符型**:用于存储单个字符。Java使用Unicode标准,因此一个`char`类型变量可以存储任何Unicode字符。 - **布尔型**:用于表示逻辑值,只能...
1. 分布式处理模式(MPP):大规模并行处理(Massively Parallel Processing)是一种常用的分布式处理架构,它可以同时在多个处理单元上执行计算任务。MPP系统针对大数据量的并行处理优化,具有强大的数据处理能力,...
版本1.52对之前的版本进行了多方面的优化,包括提高计算精度、修复已知问题以及更新了地球模型数据。这些改进确保了GeographicLib在现代地理信息系统中的可靠性和准确性。 总结,GeographicLib库1.52版是一个强大且...
开发者可能使用了高精度计算库,如MPFR,来确保测量结果的准确性。 对于商业环境,软件的性能和稳定性至关重要。因此,源代码中可能有各种优化策略,如多线程并行计算以提高效率,异常处理机制以增强软件的健壮性。...
计算机能够快速执行复杂计算,并保持高精度,这对于科学研究、工程设计、商业决策等领域至关重要。例如,在ACM国际大学生程序设计竞赛和国际遗传工程机器设计竞赛等场合,计算能力被用来解决极具挑战性的问题,展示...
OpenCVNonFree是一个基于OpenCV库的扩展模块,专注于提供一些高级图像处理功能,特别是那些在OpenCV核心库中未包含的商业或受限制的算法。这个模块包含了Java接口,使得开发者可以方便地在Java环境中利用这些功能...