Java:保留幾位有效數(shù)字

來自

rounding to an arbitrary number of significant digits

例子:保留3位有效數(shù)字

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

代碼實現(xiàn)

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. 基本數(shù)學(xué)知識

  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() 我們數(shù)學(xué)中常用到的四舍五入取整。
    math.round(-8.9) =-9
    math.round(-8.1) =-8
    math.round(8.9) =9
    math.round(8.1) =8

  4. Math.pow(底數(shù),幾次方)
    double a=2.0;
    double b=3.0;
    double c=Math.pow(a,b);
    就是2的三次方是多少;
    c最終為8;

  5. Math.log10(double a) 返回以10為底的double的值。
    特殊情況:
    如果參數(shù)是NaN或小于零,那么結(jié)果是NaN.
    如果參數(shù)是正無窮大,那么結(jié)果為正無窮大.
    如果參數(shù)是正零或負(fù)零,那么結(jié)果是負(fù)無窮大.
    如果參數(shù)是等于10N整數(shù)n,那么結(jié)果是n.

  6. 對數(shù)
    如果a的x次方等于N(a>0,且a不等于1),那么數(shù)X叫做以a為底N的對數(shù)(logarithm),記作x=logaN
    。其中,a叫做對數(shù)的底數(shù),N叫做真數(shù),x叫做“以a為N的對數(shù)”

2. 小技巧

對一個數(shù),求其以10為底的對數(shù),可以很方便的知道他的位數(shù)。
如:
Math.log10(60984.1)=4.78521661890635

60984.1的位數(shù) 5

原理

Math.round() 可以幫助我們四舍五入。注意它針對第一個小數(shù)點。
我們可以將12300變成1.23,這樣就可以四舍五入了。然后還原位數(shù)10000.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,897評論 18 399
  • 第1章 認(rèn)識JS JavaScript能做什么?1.增強(qiáng)頁面動態(tài)效果(如:下拉菜單、圖片輪播、信息滾動等)2.實現(xiàn)...
    mo默22閱讀 1,531評論 0 5
  • 我愛上一個人, 愛的那天,天氣死氣沉沉。 所有的生靈都逃亡,隱遁。 愛的那一刻,頭頂有一片云。 下起不大的雨,雨點...
    三勢閱讀 296評論 2 3
  • 啦啦啦
    lanng烽閱讀 241評論 0 0
  • 虎舌紅,紫金牛科,紫金牛屬,矮小灌木,花期6-7月,果期11月到翌年3月。
    自在家閱讀 952評論 0 2

友情鏈接更多精彩內(nèi)容