日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java如何获取一个double的小数位数

發布時間:2023/12/9 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java如何获取一个double的小数位数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

看標題是不是覺得這是一個很簡單的問題,我一開始也是這么認為的,但是實際情況下,在各種情況下我們都進行了測試,發現很多實際情況是無法不盡如人意的。

方法分析

當前能想到的比較容易有下面幾種
1、直接使用double處理
2、將double轉換成String進行處理

方法一:直接對double進行處理,進行計算通過計算后的結果進行取模操作獲取小數位數,如下:

public static int getNumberDecimalDigits(double number) {if (number == (long)number) {return 0;}int i = 0;while (true){i++;if (number * Math.pow(10, i) % 1 == 0) {return i;}}}

?

方法二:將double轉換成String后,然后利用“.”分割進行判斷,如下:(這里double轉換String有多種方式這里我們選擇其中的一種)

public static int getNumberDecimalDigits(double number) {String moneyStr = String.valueOf(number);String[] num = moneyStr.split("\\.");if (num.length == 2) {for (;;){if (num[1].endsWith("0")) {num[1] = num[1].substring(0, num[1].length() - 1);}else {break;}}return num[1].length();}else {return 0;} }

?

測試方法:

public static void main(String[] args) {System.out.print(getNumberDecimalDigits(0));System.out.print(" " + getNumberDecimalDigits(0.0));System.out.print(" " + getNumberDecimalDigits(1));System.out.print(" " + getNumberDecimalDigits(-11.1));System.out.print(" " + getNumberDecimalDigits(1.01));System.out.print(" " + getNumberDecimalDigits(0.0100));System.out.print(" " + getNumberDecimalDigits(0.123456));System.out.print(" " + getNumberDecimalDigits(11111111.1234));System.out.print(" " + getNumberDecimalDigits(11.0123456789)); }

?

結果分析

測試結果:
方法一:0 0 0 1 2 2 6 5 11
方法二:0 0 0 1 2 2 6 13 10

為什么最后的結果和我們想象不一樣呢???
原因有三個:
1、double計算丟失精度:
2.01 * 10 = 20.099999999999998

2、double轉string丟失精度:
String.valueOf(11111111.1234) = 1.11111111234E7
11111111.1234 + "" = 1.11111111234E7
Double.valueOf(11111111.123) = 1.1111111123E7
...

總結

所以在當前情況下,只要使用double進行判斷都會出現各種各樣的問題,因為double精度的問題。
所以唯一能解決的辦法就是,不要使用double,直接使用字符串,無論是從客戶端傳入的值還是生產的值都是直接使用字符串進行處理和判斷,判斷方法與方法二類似。
如果非要進行計算,請使用BigDecimal進行計算。new BigDecimal的時候注意一定要使用字符串作為參數進行new

如果你有更好的方法,能通過上面的測試,那趕緊評論讓我膜拜膜拜~

國外問題提出和解決:
https://stackoverflow.com/questions/6264576/number-of-decimal-digits-in-a-double?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa

?

總結

以上是生活随笔為你收集整理的java如何获取一个double的小数位数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。