a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 155|回复: 0

[专业语言] Java认证之Java中实现浮点数的精确运算

[复制链接]
发表于 2012-8-4 12:44:44 | 显示全部楼层 |阅读模式
Java认证之Java中实现浮点数的精确运算) i) J5 o$ j# z+ @( c3 j6 S
在Java中实现浮点数的精确运算) [1 Z" d9 \; ^1 W) f' C
package com.lv;
; V4 O3 @1 T1 [2 a+ Yimport java.math.BigDecimal;7 z+ @& `  l" w  w
public class Arith {7 e4 J5 X* v2 Z+ w
public static double add(double v1,double v2){/ s3 a0 U' i& r* L+ m
BigDecimal b1=new BigDecimal(Double.toString(v1));  N( g) u* E9 m& N2 {7 i
BigDecimal b2=new BigDecimal(Double.toString(v2));
6 j# L; l% u& f& Z- dreturn b1.add(b2).doubleval_rue();' ^' ]* W+ x, ~4 n' D! \
}3 m! x4 i1 p4 H; O, h8 O
public static double sub(double v1,double v2){
7 J# l# A. ?" N4 _% VBigDecimal b1=new BigDecimal(Double.toString(v1));, j+ y9 M0 U; N  C- s- U
BigDecimal b2=new BigDecimal(Double.toString(v2));- k/ q: S$ {# k) ~# M( D
return b1.subtract(b2).doubleval_rue();
; ?* w9 q- q! x1 E}# K. |# @# K8 [' H/ X0 ]8 y
public static double mul(double v1,double v2){. N6 Z1 G( m% |' q6 B7 |3 s
BigDecimal b1=new BigDecimal(Double.toString(v1));
; y* a6 h7 Q& x% ?& K- PBigDecimal b2=new BigDecimal(Double.toString(v2));
7 t( O$ v7 J# w" X. sreturn b1.multiply(b2).doubleval_rue();6 a& @2 z$ b- ], ?' o, H
}
( s% o4 B- E9 q7 F4 kpublic static double div(double v1,double v2){+ |; l: h# s3 ?; T
BigDecimal b1=new BigDecimal(Double.toString(v1));
) ^% J: C6 }4 M: Z# s1 d3 nBigDecimal b2=new BigDecimal(Double.toString(v2));7 Q) @7 K) S; A) E
return b1.divide(b2,10,BigDecimal.ROUND_HALF_UP).doubleval_rue();3 i4 P+ S) l& c# d1 L4 K% N* o
}) Q$ {. k9 x$ L' L6 l5 O
6 _" n1 T3 [# C  d8 J7 k) S+ T% D" b

% B! V% N0 E6 L9 s: C8 K1 ]public static double div(double v1,double v2,int scale){& M5 a  i+ O3 I2 v4 ?: E. O
if(scale《0){" }' j. ~6 I4 M8 R  T
throw new IllegalArgumentException(
' Z/ p9 n2 ]- u$ p6 P3 u4 G" J“The scale must be a positive integer or zero”);; C- p1 m. O! z% i2 ]" O7 r! a
}6 T, K1 z4 D8 _4 D  o( N/ G
BigDecimal b1=new BigDecimal(Double.toString(v1));
7 T. j/ I5 g+ ?4 U% \BigDecimal b2=new BigDecimal(Double.toString(v2));9 t) G/ n: o. U' g& j$ G. H+ W) U
return b1.divide(b2, scale,BigDecimal.ROUND_HALF_UP).doubleval_rue();# S  b3 [  X' g. P+ Z) S
}
9 f5 g0 g! q4 B4 Dpublic static double round(double v,int scale){. b; ?! V1 z0 Q8 R- V
if(scale《0){% G9 w1 B  Q( ]5 t$ ^. D& x
throw new IllegalArgumentException(
1 s' S% `9 j- s' E  C3 U4 U6 y; y“The scale must be a positive integer or zero”);
/ ~$ e3 ^' D+ K}8 Q5 t& p' h  a5 w+ a; j
BigDecimal b=new BigDecimal(Double.toString(v));
( D. ~/ T! c8 [) z$ NBigDecimal one=new BigDecimal(1);
' i4 P' _& j$ k; x8 k, sreturn b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleval_rue();  T2 ?9 }, {; G6 @( S+ Q- }& @
}7 v+ m( Q; d9 G6 f: O. z9 b
public static void main(String [] args){
" y6 ~/ T+ |1 g2 q) ]& I' FArith arith=new Arith();1 @! R$ s7 a2 ]
System.out.println(arith.div(13,3));
3 |) p( }6 a1 c; T" `9 a8 D}/ f: ^, f# M6 A  r- i  {
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-6-26 15:46 , Processed in 0.226484 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表