a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 152|回复: 0

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

[复制链接]
发表于 2012-8-4 12:44:44 | 显示全部楼层 |阅读模式
Java认证之Java中实现浮点数的精确运算- l4 h, w; e0 v% ~% m: k$ r8 Y
在Java中实现浮点数的精确运算/ ?: t0 J% T; k) k0 M% a
package com.lv;
4 ]! {. r) f* q: {' u, H7 Gimport java.math.BigDecimal;
" R3 a! K$ Q. r) R' Qpublic class Arith {
8 y: u) ^- [4 A- J3 d6 b1 i; Cpublic static double add(double v1,double v2){
* B9 q5 \4 n" u' wBigDecimal b1=new BigDecimal(Double.toString(v1));9 {, S: ]& G/ |2 ^7 D2 l% I
BigDecimal b2=new BigDecimal(Double.toString(v2));
& t$ U1 E9 N/ v: T5 @' d* l* lreturn b1.add(b2).doubleval_rue();: W/ M: D- u; `
}5 o# H  W" H; i( }) i' [# H
public static double sub(double v1,double v2){
2 }9 R; I; f) \+ G+ r& J: h- TBigDecimal b1=new BigDecimal(Double.toString(v1));
9 |: `6 s4 E) m( o* g9 Q- cBigDecimal b2=new BigDecimal(Double.toString(v2));
6 a9 y, W" f3 z# W" z, ]0 _; a& Ereturn b1.subtract(b2).doubleval_rue();1 d, e7 |( ?3 [. ]
}# C) E; ?7 s: l+ a. \) U
public static double mul(double v1,double v2){) V3 R5 p& K7 K6 K
BigDecimal b1=new BigDecimal(Double.toString(v1));0 l8 q# b9 T! e6 X7 G
BigDecimal b2=new BigDecimal(Double.toString(v2));
0 [" v5 \' H3 p8 `6 Creturn b1.multiply(b2).doubleval_rue();
( Z# Y/ s$ ~: p1 j6 t$ J}" ~' ]& ~$ U; O# h
public static double div(double v1,double v2){6 n3 x" }% f, j+ l6 e' a3 J
BigDecimal b1=new BigDecimal(Double.toString(v1));1 m" V' K0 l5 {4 ]( @  U$ l
BigDecimal b2=new BigDecimal(Double.toString(v2));
  n3 N7 D1 B3 E' r9 n! I! w+ Lreturn b1.divide(b2,10,BigDecimal.ROUND_HALF_UP).doubleval_rue();
; A7 e+ k0 F0 ^  z}5 D$ y4 {6 w/ q: f" b' q

4 U8 ?( I- g+ _
$ \0 u& p9 z' O4 @public static double div(double v1,double v2,int scale){& s. _3 I( L5 B. |; @+ c) _
if(scale《0){
: ?0 N; p5 X# k" X2 B- r7 zthrow new IllegalArgumentException(
) N8 Q6 I% n' A/ V2 N“The scale must be a positive integer or zero”);( M2 _$ k( Q& z$ S! w
}
& C, c% h2 l* _1 zBigDecimal b1=new BigDecimal(Double.toString(v1));) x) X8 E& I3 Y, F+ a! }
BigDecimal b2=new BigDecimal(Double.toString(v2));
/ E# ^+ l. J! `5 k8 @return b1.divide(b2, scale,BigDecimal.ROUND_HALF_UP).doubleval_rue();
' Z- C; D7 }) [. a8 G1 w7 p( Z}
1 ^4 x0 N2 a+ m! H4 g! Y) Ypublic static double round(double v,int scale){' ^/ ]8 X; C' M
if(scale《0){: [9 ^& q% [) l" m* v
throw new IllegalArgumentException() l. S$ ]1 |) S! Q8 |
“The scale must be a positive integer or zero”);1 Q1 j" R& ?: r8 n9 C3 A7 L* T3 y5 [
}
0 x% D) c7 l0 E2 i- _BigDecimal b=new BigDecimal(Double.toString(v));1 |# y8 U# }/ t9 e/ B
BigDecimal one=new BigDecimal(1);
2 \6 M1 h6 d/ V6 z& Preturn b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleval_rue();
0 A4 B) m& k9 S5 }' U}2 V9 v- u5 t6 b
public static void main(String [] args){
/ H" E, g" [* H6 l: b: ^) P! bArith arith=new Arith();
$ I9 \$ X9 b, p+ u1 p  n5 lSystem.out.println(arith.div(13,3));; {- g) T9 B- k& ]
}
7 w* j6 t( r6 ?+ V}
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 18:00 , Processed in 0.213677 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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