2012-05-03 5 views
6

多分、私はこれに対して2番目の目が必要です。文字列[]にピリオドを分割して空の配列を返す

私はフロートを持っているので、私はストリングになります。私は通貨としてそれを提示するために、その期間/小数でそれを分割したいと思います。

HERESに私のコード:

float price = new Float("3.76545"); 
String itemsPrice = "" + price; 
if (itemsPrice.contains(".")){ 
    String[] breakByDecimal = itemsPrice.split("."); 
    System.out.println(itemsPrice + "||" + breakByDecimal.length); 
    if (breakByDecimal[1].length() > 2){ 
     itemsPrice = breakByDecimal[0] + "." + breakByDecimal[1].substring(0, 2); 
    } else if (breakByDecimal[1].length() == 1){ 
     itemsPrice = breakByDecimal[0] + "." + breakByDecimal[1] + "0";       
    }       
} 

あなたはこれを取ると、それを実行する場合は、小数点以下何もされていないがに関して(上記のコードでは)6行目の境界エラーのうち、配列のインデックスを取得します。彼らは私が単に見下ろす午前何かされないようにするために5行目で実際に

、私は配列のサイズをプリントアウトし、それはこれらのエラーのばかげにある0

です。

私が言ったように、もう一組の目は私が必要とするものなので、あなたには明白なことを指摘すると失礼ではありませんが、私はそれを見落としました。

ありがとうございます!代わりに

答えて

19

分割は、正規表現を使用している中、 ""任意の文字に一致することを意味します。あなたは何をする必要がある

"\\." 

EDIT:固定、感謝のコメンター私は、Javaにあまり働いていないが、2行目に、多分価格は文字列に変換取得されていない

+1

またはMatcher.quoteReplacement()を使用してください。 – xxpor

+0

以前は見たことがありません。ありがとう... – ianpojman

+1

いいえ、2つのバックスラッシュが正しいです。それ以外の場合は、文字通りバックスラッシュとドット「\」と一致します。 – Bohemian

0

使用10進形式:

DecimalFormat formater = new DecimalFormat("#.##"); 
System.out.println(formater.format(new Float("3.76545"))); 
+0

あなたはNumberFormat.getCurrencyInstanceでインスタンス化のNumberFormatを使用する必要があります( )お金を扱うとき。 – xxpor

0

&エディタ。 私はC#で動作し、私はそれを次のように使用します: String itemsPrice = "" + price.ToString();

多分、価格を最初に明示的に文字列に変換する必要があります。 変換されていないため、文字列には ""のみが含まれ、 "。"はありません。したがって、分割しないで、extensionOutOfBoundsエラーが発生します。

0

価格として提示する場合は、NumberFormatを使用します。

Float price = 3.76545; 
Currency currency = Currency.getInstance(YOUR_CURRENCY_STRING); 
NumberFormat numFormat = NumberFormat.getCurrencyInstance(); 
numFormat.setCurrency(currency) 
numFormat.setMaximumFractionDigits(currency.getDefaultFractionDigits()); 
String priceFormatted = numFormat.format(price); 
System.out.println("The price is: " + priceFormatted); 

YOUR_CURRENCY_STRINGは、扱っている通貨のISO 4217通貨コードです。

また、(浮動小数点などの)非正確な形式で価格を表すことは、一般的には好ましくありません。 BigDecimalまたはDecimalを使用する必要があります。

0

次のコード試行し、自分でそれをすべて処理したい場合:

public static float truncate(float n, int decimalDigits) { 
    float multiplier = (float)Math.pow(10.0,decimalDigits); 
    int intp = (int)(n*multiplier); 
    return (float)(intp/multiplier); 
} 

をし、このようなtruncatedPriceを得る:

float truncatedPrice = truncate(3.3654f,2); 
System.out.println("Truncated to 2 digits : " + truncatedPrice); 
関連する問題