java 浮点数

package precisenumber;

//import java.util.*;
public class PreciseNumber {
public int fore;
public int after;

public void DTI(double num)// double to int
{
String numStr = Double.toString(num);
String foreStr = numStr.substring(0, numStr.indexOf("."));
String afterStr = numStr.substring(numStr.indexOf(".") + 1);
this.fore = Integer.parseInt(foreStr);
this.after = Integer.parseInt(afterStr);
}

public double ITD()// int to double
{
String numStr = this.fore + "." + this.after;
double num = Double.parseDouble(numStr);
return num;
}

public void putNum(double num) {
System.out.println("number" + num);
}

public static void main(String[] args) {

}
}

package precisenumber;

import java.util.Scanner;

public class text {
private PreciseNumber Num1 = new PreciseNumber();
private PreciseNumber Num2 = new PreciseNumber();
private PreciseNumber result = new PreciseNumber();

public double getNum() {
Scanner in = new Scanner(System.in);
double num = in.nextDouble();
return num;
}

public void add(double num1, double num2) {
Num1.DTI(num1);
Num2.DTI(num2);
result.fore = Num1.fore + Num2.fore;
result.after = Num1.after + Num2.after;
double num;
num = result.ITD();
result.putNum(num);
}

public void subtract(double num1, double num2) {
Num1.DTI(num1);
Num2.DTI(num2);
result.fore = Num1.fore - Num2.fore;
result.after = Num1.after - Num2.after;
double num;
num = result.ITD();
result.putNum(num);
}

public void multiplication(double num1, double num2) {
Num1.DTI(num1);
Num2.DTI(num2);
result.fore = Num1.fore * Num2.fore;
result.after = Num1.after * Num2.after;
double num;
num = result.ITD();
result.putNum(num);
}

public void devide(double num1, double num2) {
Num1.DTI(num1);
Num2.DTI(num2);
result.fore = Num1.fore / Num2.fore;
result.after = Num1.after / Num2.after;
double num;
num = result.ITD();
result.putNum(num);
}

public static void main(String[] args) {
text operate = new text();
System.out.println("Input num 1:");
double num1 = operate.getNum();
System.out.println("Input num 2:");
double num2 = operate.getNum();
System.out.println("选择操作:");
System.out.println("1.加 2.减 3.乘 4.除");
Scanner in = new Scanner(System.in);
int i = in.nextInt();
switch (i) {
case 1:
operate.add(num1, num2);
break;
case 2:
operate.subtract(num1, num2);
break;
case 3:
operate.multiplication(num1, num2);
break;
case 4:
operate.devide(num1, num2);
break;
}
}

}

时间: 2024-11-02 20:55:35

java 浮点数的相关文章

js,java,浮点数运算错误及应对方法

js,java,浮点数运算错误及应对方法 一,浮点数为什么会有运算错误 IEEE 754 标准规定了计算机程序设计环境中的二进制和十进制的浮点数自述的交换.算术格式以及方法. 现有存储介质都是2进制.2进制的进制基数是2,那么一个数字只要被因素包含大于2的质数的数除,都会产生无限循环小数.无限循环小数和无理数都无法,和非无限循环的有理数一起用同一种方式存储到存储介质上的同时还保持计算的兼容性. 对于无限循环小数,可以设计一种格式存储到介质上,但是同时又要和非无限循环的有理数能够计算,效率应该会变

JAVA 浮点数转化为百分数,分离整数和小数部分

JAVA 浮点数转化为百分数 public class DoubleToPercentformat { /** * 将double类型数据转换为百分比格式,并保留小数点前IntegerDigits位和小数点后FractionDigits位 * @param d * @param IntegerDigits * @param FractionDigits * @return */ public static String getPercentFormat(double d,int IntegerD

Java 浮点数精度丢失

Java 浮点数精度丢失 问题引入 昨天帮室友写一个模拟发红包抢红包的程序时,对金额统一使用的 double 来建模,结果发现在实际运行时程序的结果在数值上总是有细微的误差,程序运行的截图: 输入依次为:红包个数,抢红包的人数,选择固定金额红包还是随机金额红包,每个红包的金额(此例只有一个红包). 注意到程序最后的结果是有问题的,我们只有一个金额为 10 的红包,一个人去抢,所以正确结果应该为这个人抢到了 10 RMB. 为了使问题更加明显,我们测试一个更加简单的例子: public class

Java浮点数相等性的判断

Java浮点数相等性的判断 问题描述如下: 给定两个变量double a.double b,它们对应的装箱类型变量分别是Double x.Double y,问: 是否存在一组a.b.x.y,满足 a==b && !x.equals(y) ? 是否存在一组a.b.x.y,满足 a!=b && x.equals(y) ? 乍看之下似乎是不可能的,实际上确实存在这样的值,参考以下代码 public static void main() { double a = 0.0; doub

Java 浮点数 float或double类型的表示范围和精度

隐约记得,浮点数判断大小好像有陷阱,因为底层的二进制数不能精确表示所有的小数.有时候会产生让人觉得莫名其妙的事情. 如在java中, 0.99999999f==1f //true 0.9f==1f //false 要明白这些,首先要搞清楚float和double在内存结构 1.内存结构 float和double的范围是由指数的位数来决定的. float的指数位有8位,而double的指数位有11位,分布如下: float: 1bit(符号位) 8bits(指数位) 23bits(尾数位) dou

第二章 Java浮点数精确计算

1.实际意义 在实际开发中,如果需要进行float或double的精确计算(尤其是财务计算),直接使用float或double是不行的(具体的例子看下边的代码的main方法的测试结果),需要使用BigDecimal. 2.代码 package com.xxx.util; import java.math.BigDecimal; /** * 浮点数精准算法 */ public class BigDecimalArithUtil { private static final int DIV_SCAL

Java 浮点数的范围和精度

本篇先介绍IEEE754标准中针对浮点数的规范,然后以问答形式补充有关浮点数的知识点. (一)IEEE754标准 IEEE 754 标准即IEEE浮点数算术标准,由美国电气电子工程师学会(IEEE)计算机学会旗下的微处理器标准委员会发布. 以32位float数据为例,在内存中的存储形式是1bit的符号位(S),8bit表示指数部分(Exp),23表示小数部分的尾数(Fraction). 表一 单精度浮点数在内存中存储形式 1bit符号 8bit指数部分 23bit尾数 符号位——S取0时表示负数

Java浮点数float和double精确计算的精度误差问题总结

1.float整数计算误差 案例:会员积分字段采用float类型,导致计算会员积分时,7位整数的数据计算结果出现误差. 原因:超出float精度范围,无法精确计算. float和double的精度是由尾数的位数来决定的.浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响. float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字: double:2^5

Java浮点数内存存储

转自: [解惑]剖析float型的内存存储和精度丢失问题 1.小数的二进制表示问题 首先我们要搞清楚下面两个问题: (1)  十进制整数如何转化为二进制数 算法很简单.举个例子,11表示成二进制数: 11/2=5   余   1 5/2=2   余   1 2/2=1   余   0 1/2=0   余   1 0   结束 所以:11二进制表示为(从下往上):1011 这里提一点:只要遇到除以后的结果为0了就结束了,大家想一想,所有的整数除以2是不是一定能够最终得到0.换句话说,所有的整数转变

java浮点数剖析

定点数表达法的缺点在于其形式过于僵硬,固定的小数点位置决定了固定位数的整数部分和小数部分,不利于同时表达特别大的数或者特别小的数.计算机系统采纳了所谓的浮点数表达方式.这种表达方式利用科学计数法来表达实数,即用一个尾数(Mantissa也叫有效数字 ),一个基数(Base),一个指数(Exponent)以及 一个表示正负的符号来表达实数.浮点数利用指数达到了浮动小数点的效果,从而可以灵活地表达更大范围的实数. 当一个浮点数的尾数为0,不论其阶码为何值,该浮点数的值都为0.当阶码的值为它能表示的最