创建一个类(DoubleConverter),该类的作用是将一个字符串的值转换成浮点型(double)数值。
根据给定的信息,本文将详细解释如何在Java中创建一个名为`DoubleConverter`的类,其功能是将字符串转换为浮点数(double)。本文将深入解析类的设计思路、实现细节以及潜在的问题处理方法。 ### 创建`DoubleConverter`类 #### 类的功能与目标 `DoubleConverter`类的主要目的是接收一个字符串作为输入,并将其转换为一个浮点数(double)。这个过程涉及到字符串解析、字符验证以及数值计算等步骤。 #### 类的设计与实现 我们来看一下初步的实现框架: ```java package test2; import java.util.*; public class DoubleConverter { public void convertToDouble(String sNumber) { double number = 0.0; double temp = 0.0; int j = 0; boolean flag = true; // 遍历字符串中的每个字符 for (int i = 0; i < sNumber.length(); i++) { if ('0' <= sNumber.charAt(i) && sNumber.charAt(i) <= '9') { temp = sNumber.charAt(i) - '0'; number = number * 10.0; number += temp; } else if (sNumber.charAt(i) == '.' && flag) { j = i; flag = false; } else { System.out.println("Error: Invalid character found."); System.exit(0); } } // 处理小数部分 for (int i = 1; i < sNumber.length() - j; i++) { number /= 10; } System.out.println(number); } } ``` 这段代码实现了基本的逻辑:遍历字符串中的每个字符,如果字符是数字,则将其转换为数值并累加到结果中;如果遇到小数点,则记录位置;如果遇到其他非数字字符,则输出错误信息并终止程序执行。 #### 使用BigDecimal进行精确计算 为了提高精度并避免浮点数运算的误差问题,我们可以使用`BigDecimal`类来替代简单的浮点数运算。为此,我们创建了一个辅助类`ArithUtil`,用于实现基本的算术操作。 ```java class ArithUtil { private static final int DEF_DIV_SCALE = 10; private ArithUtil() {} public static double add(double d1, double d2) { BigDecimal b1 = new BigDecimal(Double.toString(d1)); BigDecimal b2 = new BigDecimal(Double.toString(d2)); return b1.add(b2).doubleValue(); } public static double sub(double d1, double d2) { BigDecimal b1 = new BigDecimal(Double.toString(d1)); BigDecimal b2 = new BigDecimal(Double.toString(d2)); return b1.subtract(b2).doubleValue(); } public static double mul(double d1, double d2) { BigDecimal b1 = new BigDecimal(Double.toString(d1)); BigDecimal b2 = new BigDecimal(Double.toString(d2)); return b1.multiply(b2).doubleValue(); } public static double div(double d1, double d2) { BigDecimal b1 = new BigDecimal(Double.toString(d1)); BigDecimal b2 = new BigDecimal(Double.toString(d2)); return b1.divide(b2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue(); } } ``` 在`DoubleConverter`类中,我们将使用`ArithUtil`中的方法来代替直接的浮点数运算: ```java public class DoubleConverter { public void convertToDouble(String sNumber) { double number = 0.0; double temp = 0.0; int j = 0; boolean flag = true; for (int i = 0; i < sNumber.length(); i++) { if ('0' <= sNumber.charAt(i) && sNumber.charAt(i) <= '9') { temp = sNumber.charAt(i) - '0'; number = ArithUtil.mul(number, 10); number = ArithUtil.add(number, temp); } else if (sNumber.charAt(i) == '.' && flag) { j = i; flag = false; } else { System.out.println("Error: Invalid character found."); System.exit(0); } } for (int i = 1; i < sNumber.length() - j; i++) { number = ArithUtil.div(number, 10); } System.out.println(number); } } ``` 通过以上改进,我们不仅提高了计算的精度,还确保了代码的可读性和可维护性。此外,这种方式还可以更容易地扩展或修改算法,以适应更复杂的需求。
要求:设计一个测试类来测试DoubleConverter。当测试类开始运行时,要求用户从键盘输入一个字符串,然后调用DoubleConverter的方法将字符串转换成为一个浮点型的数值。当用户输入的字符串不是浮点数时,该方法应该提示错误,并退出程序;否则返回该数值。
提示:把这两个类放在包内。不能使用Java内置的Integer类和Scanner类,而必须使用String类的charAt等方法提取每一个数字。
输出示例:
程序代码:
package test2;
import java.util.*;
//public class DoubleConverterd {
// public void DoubleConverterd(String snumber)
// {
// double number = 0.0;
// double temp = 0.0 ;
// int j = 0;
// boolean flag= true ;
// for(int i = 0;i < snumber.length();i++)
// {
// if('0' <= snumber.charAt(i) && snumber.charAt(i) <= '9')
// {
// temp = snumber.charAt(i) - '0' ;
// number = number * 10.0;
// number = number + temp;
// }else if(snumber.charAt(i) == '.' && flag)
// {
// j=i;
// flag=false;
// }
// else
- 粉丝: 3
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- tomcat6.0配置oracle数据库连接池中文WORD版最新版本
- hibernate连接oracle数据库中文WORD版最新版本
- MyEclipse连接MySQL的方法中文WORD版最新版本
- MyEclipse中配置Hibernate连接Oracle中文WORD版最新版本
- MyEclipseTomcatMySQL的环境搭建中文WORD版3.37MB最新版本
- hggm - 国密算法 SM2 SM3 SM4 SM9 ZUC Python实现完整代码-算法实现资源
- SQLITE操作入门中文WORD版最新版本
- Sqlite操作实例中文WORD版最新版本
- SQLITE特性分析中文WORD版最新版本
- ORACLE创建表空间中文WORD版最新版本