Java:保留几位有效数字

来自

rounding to an arbitrary number of significant digits

例子:保留3位有效数字

  • 1,239,451 ===》 1,240,000
  • 12.1257 ===》12.1
  • .0681 ===》.0681
  • 5 ===》5

代码实现

public static double roundToSignificantFigures(double num, int n) {
    if(num == 0) {
        return 0;
    }

    final double d = Math.ceil(Math.log10(num < 0 ? -num: num));
    final int power = n - (int) d;

    final double magnitude = Math.pow(10, power);
    final long shifted = Math.round(num*magnitude);
    return shifted/magnitude;
}

原理分析

1. 基本数学知识

  1. Math.ceil()用作向上取整。
    math.ceil(8)=8
    math.ceil(8.5) =9
    math.ceil(-8) =-8
    math.ceil(-8.5))= -8

  2. Math.floor()用作向下取整。
    Math.floor(0.60) = 0
    Math.floor(0.40) = 0
    Math.floor(5) = 5
    Math.floor(5.1) = 5
    Math.floor(-5.1) = -6
    Math.floor(-5.9) = -6

  3. Math.round() 我们数学中常用到的四舍五入取整。
    math.round(-8.9) =-9
    math.round(-8.1) =-8
    math.round(8.9) =9
    math.round(8.1) =8

  4. Math.pow(底数,几次方)
    double a=2.0;
    double b=3.0;
    double c=Math.pow(a,b);
    就是2的三次方是多少;
    c最终为8;

  5. Math.log10(double a) 返回以10为底的double的值。
    特殊情况:
    如果参数是NaN或小于零,那么结果是NaN.
    如果参数是正无穷大,那么结果为正无穷大.
    如果参数是正零或负零,那么结果是负无穷大.
    如果参数是等于10N整数n,那么结果是n.

  6. 对数
    如果a的x次方等于N(a>0,且a不等于1),那么数X叫做以a为底N的对数(logarithm),记作x=logaN
    。其中,a叫做对数的底数,N叫做真数,x叫做“以a为N的对数”

2. 小技巧

对一个数,求其以10为底的对数,可以很方便的知道他的位数。
如:
Math.log10(60984.1)=4.78521661890635

60984.1的位数 5

原理

Math.round() 可以帮助我们四舍五入。注意它针对第一个小数点。
我们可以将12300变成1.23,这样就可以四舍五入了。然后还原位数10000.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,169评论 18 399
  • 第1章 认识JS JavaScript能做什么?1.增强页面动态效果(如:下拉菜单、图片轮播、信息滚动等)2.实现...
    mo默22阅读 5,237评论 0 5
  • 我爱上一个人, 爱的那天,天气死气沉沉。 所有的生灵都逃亡,隐遁。 爱的那一刻,头顶有一片云。 下起不大的雨,雨点...
    三势阅读 1,819评论 2 3
  • 啦啦啦
    lanng烽阅读 1,616评论 0 0
  • 虎舌红,紫金牛科,紫金牛属,矮小灌木,花期6-7月,果期11月到翌年3月。
    自在家阅读 4,348评论 0 2

友情链接更多精彩内容