分数转化为小数如果不是有限的,那么必然是无限循环小数,原因很简单:对于一个分数p/q,由于q是有限的,模q的结果也是有限的,而得到p/q结果的过程,可以看做0—q-1个数中的一个构成p,迭代p/q的过程,所以必然会出现循环,如果结果是无限的,必然为无限循环小数。
这里就无限循环小数与其对应的分数用java语言来实现其转换过程,其中的无限循环小数的表示形式满足正则表达式“\d\.\d*\[\d{m}\]”,例 0.[3]是分数1/3的无限循环表示,[]中为循环节。其转换原理较为简单,网上随便搜索即可得,故这里不做细究。其代码如下:望批评指正。
package com.yh.math;
import java.util.Arrays;
public class FractionAndRecurringDecimal {
/**
* get lcm of x and y
*
* @param x
* @param y
* @return lcm of x and y,the type is long
*/
public static long getLcm(long x,long y){
if(x<y)
return getLcm(y,x);
if(y == 0){
System.out.println("ErrorMsg:@Lcd method the parameters are wrong!");
return 0;
}
long remainder = x % y;
if(remainder == 0)
return y;
else
return getLcm(y,remainder);
}
/**
* from a fraction to a finite or unfinite recurring decimal
*
* @param numInt numerator
* @param denoInt denominator
* @return String the recurring decimal of the fraction
*/
public static String fra2RecDec(int numInt , int denoInt ){
int divider = numInt / denoInt;
numInt = numInt % denoInt;
int lcm = (int)getLcm(numInt,denoInt);
if(lcm != 1 && lcm != 0){
numInt = numInt / lcm;
denoInt = denoInt / lcm;
}
boolean markArr[] = new boolean[denoInt*10];
int resuArr[] = new int[1000];
int resuIndex[] = new int[denoInt*10];
Arrays.fill(markArr, false);
Arrays.fill(resuArr, -1);
Arrays.fill(resuIndex, -1);
int startIndex = -1;
int index = -1;
numInt = numInt * 10;
while(true){
index++;
int remainder = numInt %denoInt;
if(remainder == 0)
break;
if(markArr[numInt]){
startIndex = resuIndex[numInt];
break;
}
else{
markArr[numInt] = true;
resuIndex[numInt] = index;
}
resuArr[index] = numInt / denoInt;
numInt = remainder * 10;
}
StringBuffer resuSB = new StringBuffer();
resuSB.append(divider);
resuSB.append(".");
for(int i=0;i<denoInt;i++){
if(resuArr[i] == -1)
break;
if(i == startIndex)
resuSB.append("[");
resuSB.append(resuArr[i]);
}
if(startIndex != -1)
resuSB.append("]");
return resuSB.toString();
}
/**
* get the result of the pow(10,index)
*
* @param index
* @return pow(10,index)
*/
private static long getTenBasePow(int index){
return (long)Math.pow(10, index);
}
/**
* get a number which every digit of the number is the same digit,
* and the length is index
*
* @param index the length of the number
* @param data the same data
* @return long
*/
private static long getAsideData(int index,int data){
long resu = 0;
for(int i=0;i<index;i++){
resu = resu*10 + data;
}
return resu;
}
/**
* from a recurring decimal to fraction
*
* @param recDecStr the recurring decimal
* @return fraction
*/
public static String recDec2Fra(String recDecStr){
int dotPos = recDecStr.indexOf(".");
int leftBrcPos = recDecStr.indexOf("[");
int rightBrcPos = recDecStr.indexOf("]");
if(dotPos == -1 || leftBrcPos == -1 || rightBrcPos == -1){
System.out.println("ErrorMsg:@recDec2Fra method the parameters are wrong!");
}
int preNum = leftBrcPos - dotPos - 1 ;
int recNum = rightBrcPos - leftBrcPos - 1;
long intData = Integer.parseInt(recDecStr.substring(0, recDecStr.indexOf(".")));
long preData = 0;
if(preNum != 0)
preData = Integer.parseInt(recDecStr.substring(dotPos+1,leftBrcPos));
long recData = Integer.parseInt(recDecStr.substring(leftBrcPos+1,rightBrcPos));
long numLong = recData * (preNum ==0?1:preData);
long denoLong = getTenBasePow(preNum) * getAsideData(recNum,9);
long lcm = getLcm(numLong,denoLong);
if(lcm != 0 && lcm != 1){
numLong = numLong / lcm;
denoLong = denoLong / lcm;
numLong = numLong + intData * denoLong ;
}
return numLong + "/" + denoLong;
}
//test the functions
public static void main(String args[]){
System.out.println(fra2RecDec(16, 7));
System.out.println(recDec2Fra("2.[285714]"));
}
}
分享到:
相关推荐
总的来说,掌握循环小数的概念、分类以及它们与分数的相互转化关系,是解决奥数问题,尤其是涉及小数运算问题的关键。理解并熟练运用上述规则,不仅可以帮助学生更好地理解数学原理,也能在实际解题过程中提高效率和...
循环小数是数学中的一个重要概念,特别是在小学高年级的学习中,它是分数与小数相互转换的一个关键点。循环小数是指在除法运算中,当被除数不能被除数整除时,得到的小数部分从某一位开始,有一串数字无限重复出现。...
同时,也可以用分数与小数的关系,让学生理解为什么有些分数能转化为循环小数,比如1/7 = 0.142857142857...。 表示循环小数有几种方法:一是用点和括号,例如,0.333...可以写为0.(3);二是用分数形式,如0....
的分数转化成小数的方法",教师可以引导学生通过实例逐步理解,如将4/11转化为小数,让学生尝试除法运算,然后讨论如何确定循环节,以及如何用分数形式表示无限循环小数。同时,教师还可以强调对于无限不循环小数...
在数学中,分数和小数是两种不同的数值表示方式,它们可以互相转换,以适应不同情境下的计算需求。本课时主要围绕分数和小数的互化展开,旨在帮助学生理解和掌握这两种数值形式的转化方法。 首先,我们要理解分数...
例如,分数\( \frac{1}{3} \)不能转化为有限小数,因为其无限循环的小数表示为0.333...。为了让学生掌握这一规律,教师会引导他们进行分数的质因数分解。通过分析能化成有限小数的分数(如\( \frac{1}{2} \), \( \...
这一概念通常在五年级的学生中进行教学,帮助他们理解分数与小数的相互转换,以及无限循环现象在数学上的表达。 循环小数的定义是:当一个小数部分从某一位开始,一个数字或几个数字按照一定的顺序不断重复,这样的...
这种方法对于有理数(即可以表示为两个整数比例的数)特别有效,因为它们都能被准确地转换为有限小数或无限循环小数。 其次,将小数转化为分数。例如,0.06可以写为6除以100,简化后为1006,即1006。同样,0.6可以...
对于不能精确除尽的分数,其小数部分可能是无限循环的。 同样,分数也可以转化为带分数,这是一种混合形式,包含一个整数和一个真分数。例如,假分数3/2可以转换为1又1/2,其中1是整数部分,1/2是真分数部分。这种...
在处理无限循环小数时,可能需要按照四舍五入法保留特定位数的小数。 此外,教程还提醒学生注意分数化成小数时的规则,如0.8表示8个十分之一,即8/10;0.05表示5个百分之一,即5/100。通过填空题和连线题,巩固学生...
第三部分是对小数大小的比较,这需要学生理解小数点的位置和无限循环小数的概念。0.034是最小的,因为它只有两位小数;接着是0.304304…,这是一个无限循环小数,循环节是304;然后是0.34,它是一个有限小数;0.34·...
故事中,110国王拥有一个名为“等号变换器”的神奇法宝,可以将无限循环小数转化为分数。这个过程揭示了一个数学概念,即无限循环小数与分数之间的等价关系。无限循环小数可以通过一定的规则转换成分数,这是数学中...
在处理无法直接化成有限小数的分数时,需要将其转换为无限循环小数,然后按照上述步骤进行。 其次,百分数转化为小数则相反,需要移除百分号并将小数点向左移动两位。例如,2.7%转化为小数就是0.027,124%转化为...
- 对于无限循环小数,可以通过短除法或者倍数关系将其转换为分数。 4. **分数化小数**: - 分母是10、100、1000等的分数可以直接转化为小数,将分子放到小数点右边相应的位置上。如1/10=0.1,23/100=0.23。 - ...
此外,了解有限小数和无限循环小数的区别,0.767676是无限重复小数,而并非循环小数。 7. **实际应用**:例如,分母是10的所有最简真分数的和可以通过计算1/10 + 3/10 + 7/10 + 9/10 = 2,这涉及到分数的加法。因数...
7. **分数、小数、百分数的互化**:三者之间可以互相转换,例如,分数25/100可以转换为小数0.25,也可以转换为百分数25%。 8. **分数与除法、分数与比的关系**:分数的分子相当于除法中的被除数,分母相当于除数,...
题目第三部分要求将几个小数按大小顺序排列,其中包括有限小数、无限循环小数和无限不循环小数。如0.034是最小的,因为它只有一位小数;接着是0.304304…,它是一个无限循环小数,且循环部分只有一个数字04;0.34是...
例如,8/7 = 1.142857(无限循环小数)。 4. 百分数转化为分数: - 将百分数除以100得到小数,然后将小数转化为最简分数。例如,25%除以100得到0.25,0.25可以转化为25/100,简化为1/4。 5. 百分数转化为小数: ...
110国王使用等号变换器将无限循环小数转换成分数,这体现了数学中的一种等价转换思想。例如,0.999... 可以理解为9/9,通过连续加9自身,最终等于1。 故事还涉及了加法运算,3个0.333... 通过加法结合成0.999...,...
《五年级下数学一课一练-分数和小数的互化》是针对人教版小学五年级下学期数学课程的一份练习材料,主要涵盖了分数与小数相互转化的技能训练。这部分内容对于理解基本的数学概念至关重要,因为它涉及到小数和分数...