データベースからフェッチしている文字列値がほとんどありません。
"1/4","2/3"
0.25
ただし、Android ListViewコンテンツとして表示している間は、、として表示する必要があります0.66
。
ここで、文字列を分割してから、個々の文字列を数値に変換してから、それらを分割して結果を得る必要はありません。
誰か知っていますか、のような直接的な機能Double.valueOf
やparseDouble
種類はありますか?
なぜ「文字列を分割してから、個々の文字列を数値に変換してから、それらを分割して結果を得る必要がない」のでしょうか。
私はそれを行うための組み込み関数を知らないので、最も簡単な解決策は次のとおりです。
double parse(String ratio) {
if (ratio.contains("/")) {
String[] rat = ratio.split("/");
return Double.parseDouble(rat[0]) / Double.parseDouble(rat[1]);
} else {
return Double.parseDouble(ratio);
}
}
また、比率の整数表現がある場合もカバーします
parse("1/2") => 0.5
parse("3/7") => 0.42857142857142855
parse("1") => 1.0
過去2年間でこの問題を解決したと思います。ただし、Apachecommonsの分数クラスを使用できます。
パーサーが組み込まれているので、次のように呼び出します。
Fraction fraction = Fraction.getFraction("1/2");
double d = fraction.doubleValue();
その場合、dには.5が含まれている必要があります。
を使用して分数を分割できますsplit("/")
。次に、値をに変換しDouble
て除算を実行できます。私はAndroidのことを知りません、それが私がJavaでそれをする方法です。
Javaでは、JavaScriptのevalのようなものがないため、これを使用できる可能性があります。
そんなことはないと思います。しかし、なぜこのような独自の関数を作成しないのかわかりません。
public static double fromStringFraction(String fraction){
String[] fractionArray = fraction.split("/");
try {
if (fractionArray.length != 2){
if (fractionArray.length == 1){
return Double.parseDouble(fractionArray[0]);
}
else {
return 0d;
}
}
double b = Double.parseDouble(fractionArray[1]);
if (b==0d){
return 0d;
}
Double a = Double.parseDouble(fractionArray[0]);
return a/b;
}
catch (NumberFormatException e){
return 0d;
}
}
使ってみてください
SpannableStringBuilder test = new SpannableStringBuilder();
test.append("\n");
test.append(Html.fromHtml("<sup>5</sup>/<sub>9</sub>"));
test.append("\n");