BigDecimal解決浮點型運算中丟失精度的問題
BigDecimal在浮點型資料計算丟失精度的常見案例:
[java] view plain copy print?- package com.mmall.test;
- import org.junit.Test;
- import java.math.BigDecimal;
- /*
- Created by jia
- /
- publicclass BigDecimalTest {
- //和想象不太一樣,很容易丟失精度
- //很多語言都有專門的貨幣計算,java沒有
- //java在浮點型運算過程中會丟失精度
- //很可能造成一個使用者有10元錢不能購買9.9999元的商品
- @Test
- public
- System.out.println(0.05+0.01);
- System.out.println(1.0+0.42);
- System.out.println(4.015100);
- System.out.println(123.3/100);
- /
- 0.060000000000000005
- 1.42
- 401.49999999999994
- 1.2329999999999999
- /
- }
- @Test
- publicvoid test2(){
- BigDecimal b1 = new
- BigDecimal b2 = new BigDecimal(0.01);
- //b1.add(b2);
- System.out.println(b1.add(b2));
- //0.06000000000000000298372437868010820238851010799407958984375
- //又長又亂
- }
- @Test
- publicvoid test3(){
- BigDecimal b1 = new BigDecimal(“0.05”);
- BigDecimal b2 = new BigDecimal(
- System.out.println(b1.add(b2));
- //0.06
- //用string 構造器,完美解決
- }
- }
下面封裝一個BigDecimalUntil工具類,方便以後使用:
[java] view plain copy print?- package com.mmall.until;
- import java.math.BigDecimal;
- /*
- Created by jia
- */
- publicclass BigDecimalUntil {
- //使構造器不能在外部例項化
- private BigDecimalUntil(){
- }
- publicstatic BigDecimal add(double v1,double v2){
- BigDecimal b1 = new BigDecimal(Double.toString(v1));
- BigDecimal b2 = new BigDecimal(Double.toString(v2));
- return b1.add(b2);
- }
- publicstatic BigDecimal sub(double v1,double v2){
- BigDecimal b1 = new BigDecimal(Double.toString(v1));
- BigDecimal b2 = new BigDecimal(Double.toString(v2));
- return b1.subtract(b2);
- }
- publicstatic BigDecimal mul(double v1,double v2){
- BigDecimal b1 = new BigDecimal(Double.toString(v1));
- BigDecimal b2 = new BigDecimal(Double.toString(v2));
- return b1.multiply(b2);
- }
- publicstatic BigDecimal div(double v1,double v2){
- BigDecimal b1 = new BigDecimal(Double.toString(v1));
- BigDecimal b2 = new BigDecimal(Double.toString(v2));
- return b1.divide(b2,2,BigDecimal.ROUND_HALF_UP);
- //除不盡的時候要四捨五入,並且保留幾位小數
- }
- }
相關推薦
BigDecimal解決浮點型運算中丟失精度的問題
BigDecimal在浮點型資料計算丟失精度的常見案例: [java] view plain copy print?package com.mmall.test; import org.junit.Test; import java.math.Bi
浮點型加減乘除(解決浮點型運算精度丟失問題)
package dealNumber; import java.math.BigDecimal; /** * 進行BigDecimal物件的加減乘除,四捨五入等運算的工具類 * * @author Yuk */ public clas
浮點型運算結果是不精確的,會出現精度丟失
float a = 1.1f; float b = 3.1415926f; //輸出結果3.1415925 精度丟失 double b=1.1d; double result = a+b; //結果是2.200000023841858 精度丟失 解析: 第
BigDecimal解決浮點精度丟失
一、問題:(1)在電商網站計算中,價錢計算是重要一環,那麼價錢是如何計算的,先來看:可以看到如果用Long型別計算,會導致問題。比如我買一件0.01元和0.05元的商品,我手裡一共0.06元,是可以購買的,但是付款的時候卻會發現錢不夠,因為Long型別,0.01+0.05等於
js中浮點型運算
轉載http://www.cnblogs.com/wangkongming/archive/2013/01/18/2866788.html <script> //加法函式,用來得到精確的加法結果 //說明:javascript的加法結果會有誤差,在兩個浮點數相
python整形浮點型運算規則
order adding containe 記得 ont 依然 pad syn htm https://www.cnblogs.com/fwindpeak/p/4891212.html 在python中,默認情況下,如果表達式中全是整型,結果也會僅僅是整型。有時候沒註意
MIPS浮點型運算,載入,加 減 乘 除以及比較大小
迭代法求平方根 main: li $v0,6 syscall #輸入浮點數 c.lt.s $f14,$f10 #if(f14<f10) set condition flag=1 bc1t label#if(condition flag==1)go end label
【LoadRunner】解決指令碼中字元型轉浮點型或由浮點型轉字元型
double atof( const char *string); //申明函式 Action() { float UpPrice1; float i=0.1; char* price1=(char*)calloc(10
python讀取excel,數字都是浮點型,日期格式是數字的解決辦法
6.2 spa 讀取excel pytho work clas odin 技術 div excel文件內容: 讀取excel: # coding=utf-8 import xlrd import sys reload(sys) sys.setdefaultenco
關於浮點型的運算---比較
字符串 source dpa sans color word family justify 精度 1.常見問題 $a = 0.1; $b = 0.7; var_dump(($a + $b) == 0.8); 打印出來的值居然為 boolean false printf
浮點型數據轉存到字符串中(轉)
gpa 就是 amp %d 輸出 .com char s 語言 oat 一、C語言中數值型數據分為兩大類:整型和浮點型整型:char int short long浮點型:float(單精度) double(雙精度) 二、浮點型數據轉存到字符串中char str[30]; /
正確生成浮點型的方法,解決sqlachemy Float浮點型的坑,生成float類型時,長度和精度均為0,導致查詢不到結果!
依然 tab 圖片 control 選擇 分享 ice mod ble 問題描述 在使用flask_sqlachemy時,給price字段選擇了Float類型,數據庫用的mysql,生成數據庫表後,發現 from sqlalchemy import Float
正確生成浮點型的方法,解決sqlachemy Float浮點型的坑,生成float型別時,長度和精度均為0,導致查詢不到結果!
問題描述 在使用flask_sqlachemy時,給price欄位選擇了Float型別,資料庫用的mysql,生成資料庫表後,發現 from sqlalchemy import Float,Column price = Column(Float,default=0.00) &
整形數int、浮點型資料float,在記憶體中儲存的表示
引言: 突然想到一個底層問題。 計算機組成原理裡學的:定點整數 定點小數 浮點數; 程式設計裡的基本資料型別int float在記憶體中的儲存形式; 二者究竟的對應關係是? CSDN部落格裡有這樣一句話,“實數在記憶體中以規範化的浮點數存放”,請先理清“實數”是多大範圍再回味這句話! 我在書上看到
MFC中CString類字串與長整型、浮點型、字元陣列char資料之間的相互轉換
一、長整型資料與CString類字串相互轉換 1.將長整型資料轉換為CString字串類 CString str; long ld; str.Format(_T("%ld"),ld); 2.將CString字串類轉換為長整型資料 CString str; long ld; ld=
java中判斷兩個浮點型(float)資料是否相等
示例程式碼: public static void main(String[] args) { float a = 10.222222225f; float b = 10.222222229f; System.out.println("使用==判斷是否相等:" + (
PHP對於浮點型的資料需要用不同的方法去解決
Php: BCMathbc是Binary Calculator的縮寫。bc*函式的引數都是運算元加上一個可選的 [int scale],比如string bcadd(string $left_operand, string $right_operand[, int $scale
Java中浮點型資料Float和Double進行精確計算的問題
Java中浮點型資料Float和Double進行精確計算的問題 來源 https://www.cnblogs.com/banxian/p/3781130.html 一、浮點計算中發生精度丟失 大概
Java中浮點型數據Float和Double進行精確計算的問題
file 2.4 設置 數據 有一個 對比 科學 單個 做到 Java中浮點型數據Float和Double進行精確計算的問題 來源 https://www.cnblogs.com/banxian/p/3781130.html 一、浮點計算中發生精度丟失 大
基本內建型別中整型浮點型佔多少位元組
今天做一個題目時,突然發現忘了int佔2位元組還是4位元組,有的說2位元組,有說4位元組。後來又翻書查一下,確認這個是和多少位系統以及編譯有關的。 不過可以用sizeof 運算子查出具體這個型別佔幾字