将float转换为字符串分数表示 [英] Converting a float into a string fraction representation
本文介绍了将float转换为字符串分数表示的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
float num = 1.33333;
String numStr = Convert(num); //应该返回1 1/3
float num2 = 1.333;
字符串numStr2 =转换(num2); //也应该返回1 1/3
float num3 = 0.5;
字符串numStr3 =转换(num3); //应该返回1/2
float num4 = 2.25;
字符串numStr4 =转换(num4); //返回2 1/4
如何在Java中做到这一点?最简单的方法可能是使用试验和错误。
if(d <0){
sb.append(' - ');
d = -d;
}
long l =(long)d;
if(l!= 0)sb.append(l);
d - = 1;
double error = Math.abs(d);
int bestDenominator = 1;
for(int i = 2; i <= factor; i ++){
double error2 = Math.abs(d - (double)Math.round(d * i)/ i)
if(error2
bestDenominator = i; (bestDominator> 1)
sb.append('').append(Math.round(d * bestDenominator))。append('/'
).append(bestDenominator);
返回sb.toString();
public static void main(String ... args){
System.out.println(toFraction(1.3333,1000));
System.out.println(toFraction(1.1428,1000));
for(int i = 1; i <100000000; i * = 10){
System.out.println(PI+ i +:+ toFraction(3.1415926535897932385,i));
$ p
$ b
1 1/3
1 1/7
PI 1:3
PI 10:3 1/7
PI 100:3 14/99
PI 1000:3 16/113
PI 10000:3 16/113
PI 100000:3 14093/99532
PI 1000000:3 140914/995207
PI 10000000:3 244252/1725033
In Java, I am trying to find a way to convert a float number into a fraction string. For example:
float num = 1.33333;
String numStr = Convert(num); // Should return "1 1/3"
float num2 = 1.333;
String numStr2 = Convert(num2); // Should also return "1 1/3"
float num3 = 0.5;
String numStr3 = Convert(num3); // Should return "1/2"
float num4 = 2.25;
String numStr4 = Convert(num4); // Should return "2 1/4"
Any ideas how to do this in Java?
解决方案
The simplest approach might be to use trial and error.
public static String toFraction(double d, int factor) {
StringBuilder sb = new StringBuilder();
if (d < 0) {
sb.append('-');
d = -d;
}
long l = (long) d;
if (l != 0) sb.append(l);
d -= l;
double error = Math.abs(d);
int bestDenominator = 1;
for(int i=2;i<=factor;i++) {
double error2 = Math.abs(d - (double) Math.round(d * i) / i);
if (error2 < error) {
error = error2;
bestDenominator = i;
}
}
if (bestDenominator > 1)
sb.append(' ').append(Math.round(d * bestDenominator)).append('/') .append(bestDenominator);
return sb.toString();
}
public static void main(String... args) {
System.out.println(toFraction(1.3333, 1000));
System.out.println(toFraction(1.1428, 1000));
for(int i=1;i<100000000;i*=10) {
System.out.println("PI "+i+": "+toFraction(3.1415926535897932385, i));
}
}
prints
1 1/3
1 1/7
PI 1: 3
PI 10: 3 1/7
PI 100: 3 14/99
PI 1000: 3 16/113
PI 10000: 3 16/113
PI 100000: 3 14093/99532
PI 1000000: 3 140914/995207
PI 10000000: 3 244252/1725033
这篇关于将float转换为字符串分数表示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文