原标题:黄金分式与黄金分割数(Java实现)

本文通过 黄金分式计算 黄金分割数,讲解一下怎样使用java.math包中的 BigDecimal类。

当需要更精准的处理带小数点的数时(比如需要精度大于16位有效数字),可以使用 BigDecimal类。基本用法如下

(1)定义精度(precision)

使用java.math包中的MathContext类的对象定义精度。

例如 创建的 precision对象定义的精度是100位,采用四舍五入:

MathContext precision=

new MathContext(100,RoundingMode.HALF_UP);

RoundingMode类中的许多static常量定义了精度 采用的取舍办法(比如也有五舍六入额)

(2)按着precision精度创建BigDecimal类的对象

例如

BigDecimal oneNumber=

new BigDecimal("0.618",precision);

BigDecimal twoNumber=

(3)按着 precision精度进行运算

例如进行 除法运算:

BigDecimal result =

oneNumber. divide(twoNumber,precision);

(4)计算黄金分割数

下图的无限分式(黄金分式)的极限值是无理数黄金分割数:

如果希望计算出黄金分割数的近似值,精度达到100位,那么double型就力不从心了。下列Get168类中的代码使用BigDecimal类和黄金分式计算黄金分割数,精度是100位(同时比较了double的计算效果)如图所示意。

Get168.java

import java.math.MathContext;

import java.math.RoundingMode;

import java.math.BigDecimal;

public class Get168 {

static public String get168ByBigDecimal(int n) {

// 规定计算精度保留n位有效数字(四舍五入):

MathContext precision =

new MathContext(n,RoundingMode.HALF_UP);

BigDecimal result =null;

BigDecimal one = new BigDecimal("1",precision);

BigDecimal item = one;

int i=1;

while(i<=99999){

result = item;

item =

one.divide(one.add(result,precision),precision);

i++;

}

return "精度是"+precision+"位的黄金分割数n"+result.toString;

}

static public String get168ByDouble(int n) {

//计算精度保留16位有效数字(四舍五入):

double result =1;

double item = 1;

int i=1;

while(i<=99999){

result = item;

item = 1/(1+item);

i++;

}

String str = String.format("%."+n+"f",result);

return "精度是16,小数点"+n+"位的黄金分割数n"+str;

}

}

DigitPrecision.java

import java.math.MathContext;

import java.math.RoundingMode;

import java.math.BigDecimal;

public class DigitPrecision {

public static void main(String args[]){

//规定计算精度保留18位有效数字(四舍五入):

MathContext precision =

new MathContext(18,RoundingMode.HALF_UP);

BigDecimal oneNumber = new BigDecimal("0.618",precision);

BigDecimal twoNumber = new BigDecimal("5.980899",precision);

BigDecimal result =null ;

result = oneNumber.add(twoNumber,precision);

System.out.println("和:"+result);

result = oneNumber.subtract(twoNumber,precision);

System.out.println("差:"+result);

result = oneNumber.multiply(twoNumber,precision);

System.out.println("积:"+result);

result = oneNumber.divide(twoNumber,precision);

System.out.println("商:"+result);

System.out.println("使用BigDecimal计算黄金分割数:");

System.out.println(Get168.get168ByBigDecimal(100));

System.out.println("使用基本型double计算黄金分割数:");

System.out.println(Get168.get168ByDouble(100));

}

}

作者耿祥义(业余爱好小提琴violin)教学辅助公众号java-violin:

扫码,优惠购书

全书分为17章,分别讲解了基本数据类型、枚举和数组、运算符、表达式和语句、类、对象和接口、面向对象的几个基本原则、重要的设计模式、常用实用类、Java Swing图形用户界面、对话框、Java输入/输出流、泛型与集合框架、JDBC数据库操作、Java多线程机制、Java网络基础以及Java Applet等内容。本书适合作为高等院校计算机专业Java语言程序设计以及面向对象语言课程的教材。返回搜狐,查看更多

责任编辑:

java黄金分割_黄金分式与黄金分割数(Java实现)相关推荐

  1. 精通java图片_面试必备:详解Java I/O流,掌握这些就可以说精通了?

    Java IO概述 IO就是输入/输出.Java IO类库基于抽象基础类InputStream和OutputStream构建了一套I/O体系,主要解决从数据源读入数据和将数据写入到目的地问题.我们把数 ...

  2. 奥鹏教育微学吧JAVA答案_西交20秋《Java语言》在线作业【标准答案】

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 西交<Java语言>在线作业 试卷总分:100 得分:100 一.单选题 (共 30 道试题,共 60 分) 1.给出下面代码,关于该程序以下 ...

  3. 小白学习python好还是java好_小白应该学Python还是Java?

    Java和Python两门语言都是目前非常热门的语言,可谓北乔峰南慕容,二者不分上下,棋逢对手.但是对于初学者来说,非常困惑,因为时间和精力有限,上手必须要先学一门,到底选那个好呢,今天3分钟带你透彻 ...

  4. cmd编译java命令_使用CMD命令编译执行java命令

    写程序时,有时候需要动态编译执行,经过各种百度及实战,总结一些使用经验. .java文件分为有包名,无包名,又分为有jar包,无jar包,是否指定jre等等. 接下来总结如下: cmd 编译执行jav ...

  5. selenium java 验证码_如何使用Selenium WebDriver和Java从图像(验证码)中读取文本

    我有注册网页,但在最后验证码显示.. 我无法从图像中读取文本.我要提一下代码和输出.. @Test public void loginTest() throws InterruptedExceptio ...

  6. 零基础可以学习java吗_零基础真的可以学习java吗?

    Java是一个比较抽象的开发语言,涉及知识点比较多,如果自学的话,可以按照五个阶段来学习,先学好基础知识,再逐步扩展,由易到难.要注意视频和书本内容相辅相成,切记不要只看视频而不忽略书本基础的知识要点 ...

  7. lr java脚本_【上海校区】 LR Java脚本编写方法

    之前在某一家银行也接触过java写的性能接口脚本,最近因项目,也需编写java接口性能测试脚本,脑袋一下懵逼了,有点不知道从何入手.随后上网查了相关资料,自己又稍微总结了一下,与大家共同分享哈~ 首先 ...

  8. 第三方工具监控java进程_前9个免费的Java进程监视工具以及如何选择一种

    第三方工具监控java进程 这样就可以运行Java代码了. 也许它甚至可以在生产服务器上运行. 当您做好工作后,我们得到了好消息和令人讨厌的消息. 令人讨厌的消息是,现在开始调试. 就是进行调试和应用 ...

  9. amd cpu不能在cmd环境下运行java代码_如何在Windows10中配置java的JDK环境

    今天给大家分享一下如何配置java的JDK环境.操作步骤如下: 1.下载好 jdk 的安装文件,我下载的是 jdk-10.0.1_windows-x64_bin.exe 这个版本的安装文件: 2.使用 ...

  10. 银河麒麟配置java环境_中标麒麟系统上安装Java、Eclipse指南.doc

    中标麒麟系统上安装Java环境指南 Java_NeoKylin_Install_Guide 2015-01-12 修订记录 序号 版本号 日期 修订人 摘要 1 1.0 目录Content 概述 -- ...

最新文章

  1. vue中阻止冒泡事件
  2. java struts2 安全漏洞 devMode 简介
  3. jQuery之防止冒泡事件
  4. 日本公司用人工智能帮人做金融交易
  5. 印度HCL揭秘云计算五大盈利模式
  6. 解决Action: Consider the following: If you want an embedded database (H2, HSQL or Derby), ple..
  7. java替换特殊字符_Java StringBuffer替换特殊字符
  8. Django使用消息提示简单的弹出个对话框
  9. numpy 加速 矩阵相加_图解入门 NumPy !
  10. 解决Windows 2003终端服务许可证过期的办法
  11. linux 会话 进程组 守护进程
  12. win10、Ubuntu双系统删除Ubuntu的方法
  13. 【Java实例】随机数比较大小
  14. C盘用户里的文件夹改名
  15. 第六次meeting会议
  16. 年记 2018,新年快乐
  17. 01背包, 完全背包,多重背包
  18. 【数据字典】第三篇 利用PowDesigner自动生成数据字典
  19. ddddocr 汉字位置识别
  20. Ubuntu 18.04 安装 xdm 2018 ( Xtreme Download Manager 2018 )

热门文章

  1. SVN_处理文件误删恢复
  2. java怎么才能学透彻?
  3. java中多种写文件方式的效率对比实验
  4. 案例效果:实现移动端端轮播图效果
  5. 「转」AR技术应用 の 照片透视效果
  6. RocketMQ集群(2主2从)搭建详细步骤
  7. SLAM之回环检测与优化
  8. 货币转换python代码_在Python中创建货币转换器
  9. Axure 8 + SVN 协同开发
  10. 基于Vue.js的2048小游戏的设计与实现