wake-up-neo.net

Anzeige der Währung im indischen Nummerierungsformat

Ich habe eine Frage zum Formatieren der Rupie-Währung (Indische Rupie - INR).

Normalerweise wird ein Wert wie 450500 formatiert und als 450,500 angezeigt. In Indien wird derselbe Wert als 4,50,500 angezeigt.

Zum Beispiel werden Zahlen hier dargestellt als:

1
10
100
1,000
10,000
1,00,000
10,00,000
1,00,00,000
10,00,00,000

Siehe Indisches Nummerierungssystem

Die Trennzeichen stehen hinter zwei Ziffern, bis auf den letzten Satz in Tausendern.

Ich habe im Internet gesucht und die Leute haben gebeten, das Gebietsschema en_GB oder das Muster #,##,##,##,##0.00 zu verwenden.

Ich habe dies in JSTL mit dem folgenden Tag versucht:

<fmt:formatNumber value="${product.price}" type="currency" 
  pattern="#,##,##,##,###.00"/>

Dies scheint jedoch das Problem nicht zu lösen. Jede Hilfe in dieser Angelegenheit wird sehr geschätzt.

Vielen Dank

46
Mihir

Leider unterstützt DecimalFormat keine Gruppen mit variabler Breite. Daher werden die Werte nie genau so formatiert, wie Sie es möchten:

Wenn Sie ein Muster mit mehreren Gruppierungszeichen angeben, wird das Intervall zwischen dem letzten und dem Ende der Ganzzahl verwendet. Also _"#,##,###,####" == "######,####" == "##,####,####"_.

Die meisten Zahlenformatierungsmechanismen in Java basieren auf dieser Klasse und erben daher diesen Fehler.

ICU4J (die Java-Version der International Components for Unicode ) bietet eine NumberFormat -Klasse, die unterstützt diese Formatierung:

_Format format = com.ibm.icu.text.NumberFormat.getCurrencyInstance(new Locale("en", "in"));
System.out.println(format.format(new BigDecimal("100000000")));
_

Dieser Code erzeugt diese Ausgabe:

Rs 10,00,00,000.00

Hinweis: Die Klasse _com.ibm.icu.text.NumberFormat_ erweitert nicht die Klasse Java.text.NumberFormat (da sie bereits eine ICU-interne Klasse erweitert) Basisklasse), es bewirkt jedoch eine Erweiterung der Java.text.Format Klasse, die die format(Object) Methode.

61
Joachim Sauer

Mit Android hat das für mich funktioniert:

new DecimalFormat("##,##,##0").format(amount);

450500 wird als 4,50,500 formatiert

http://developer.Android.com/reference/Java/text/DecimalFormat.html - DecimalFormat unterstützt zwei Gruppierungsgrößen - die primäre Gruppierungsgröße und eine für alle anderen.

19
Kiran

hier ist die einfache Sache, die du tun kannst,

 float amount = 100000;

 NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("en", "IN"));

 String moneyString = formatter.format(amount);

 System.out.println(moneyString);

Die Ausgabe beträgt Rs. 100.000,00. 

9
CleanX

Ich hatte auch das gleiche Problem ... Ich arbeitete mit DecimalFormat.

Ich habe keine Kenntnis von JSTL, aber Sie können durch meine Lösung etwas herausfinden.

Da die Gruppierungsgröße in DecimalFormat konstant bleibt. Ich habe beide Teile getrennt und mit unterschiedlichen Mustern formatiert. Hier ist der Code.

public static String format(double value) {
    if(value < 1000) {
        return format("###", value);
    } else {
        double hundreds = value % 1000;
        int other = (int) (value / 1000);
        return format(",##", other) + ',' + format("000", hundreds);
    }
}

private static String format(String pattern, Object value) {
    return new DecimalFormat(pattern).format(value);
}

Es wird ein Format wie das Indian Numbering System zur Verfügung gestellt.

Wenn Sie Dezimalpunkte wünschen, fügen Sie in beiden Bedingungen einfach ".##" hinzu.

"###" an "###.##" und "000" an "000.##".

5
Akshat

Die einfache Lösung ist -

Double amount = 5356673553123.0; //amount is an example ,can be used with any double value

**DecimalFormat IndianCurrencyFormat = new DecimalFormat("##,##,###.00");**

dann verwenden Sie es als -

String formattedAmount = IndianCurrencyFormat.format(amount);
4
NikHiL Bonte
public String getIndianCurrencyFormat(String amount) {
    StringBuilder stringBuilder = new StringBuilder();
    char amountArray[] = amount.toCharArray();
    int a = 0, b = 0;
    for (int i = amountArray.length - 1; i >= 0; i--) {
        if (a < 3) {
            stringBuilder.append(amountArray[i]);
            a++;
        } else if (b < 2) {
            if (b == 0) {
                stringBuilder.append(",");
                stringBuilder.append(amountArray[i]);
                b++;
            } else {
                stringBuilder.append(amountArray[i]);
                b = 0;
            }
        }
    }
    return stringBuilder.reverse().toString();
}

Das habe ich gemacht, um das indische Währungsformat zu erhalten. Wenn der Eingang 1234567890 ist, bedeutet dies eine Ausgabe von 1,23,45,67,890.

3
Palanivelraghul

Wenn kein Standardgebietsschema verfügbar ist und der Benutzer keine Änderungen am Gebietsschema vornimmt, können Sie das Währungssymbol mithilfe der Unicode- und Dezimalformatierung festlegen. Wie im folgenden Code:

Für z. Das indische Währungssymbol einstellen und den Wert formatieren. Dies funktioniert, ohne dass der Benutzer Änderungen an den Einstellungen vornimmt.

    Locale locale = new Locale("en","IN");
    DecimalFormat decimalFormat = (DecimalFormat) DecimalFormat.getCurrencyInstance(locale);
    DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(locale);
    dfs.setCurrencySymbol("\u20B9");
    decimalFormat.setDecimalFormatSymbols(dfs);
    System.out.println(decimalFormat.format(payment));

Ausgabe:

₹12,324.13
2

enter image description here__Code-Auszug

Just Copy past this function. :)

  public static String rupeeFormat(String value){
            value=value.replace(",","");
            char lastDigit=value.charAt(value.length()-1);
            String result = "";
            int len = value.length()-1;
            int nDigits = 0;

            for (int i = len - 1; i >= 0; i--)
            {
                result = value.charAt(i) + result;
                nDigits++;
                if (((nDigits % 2) == 0) && (i > 0))
                {
                    result = "," + result;
                }
            }
            return (result+lastDigit);
        }
2
Nishant Shah

Kotlin-Version, Funktioniert unter Android API 26

fun currencyLocale(value: Double): String {
    val formatter = NumberFormat.getCurrencyInstance(Locale("en", "in"))
    return formatter.format(value)
}

fun parseCommaSeparatedCurrency(value: String): Number {
    return NumberFormat.getCurrencyInstance(Locale("en", "in")).parse(value)
}
2
Kavin Varnan
//Input:
long num = 450500;

// Unlike other countries, there is no direct Locale field for India.Therefore, we need to construct a locale for India.
Locale loc = new Locale("en", "in"); // This will display currency with "Rs." symbol.

// or use below to display currency with "INR" symbol.
Locale loc = new Locale("", "in");

NumberFormat indiacurrency = NumberFormat.getCurrencyInstance(loc);
String result = indiacurrency.format(num);
System.out.print(result);
1
G M

Die Standardmethoden in vorhandenen Bibliotheken können nur Tausende von Separatoren anzeigen. Daher müssen wir eine benutzerdefinierte Funktion dafür schreiben. Sie können mehrere Teilzeichenfolgen verwenden, um das gewünschte Ergebnis zu erhalten.

In Java 

function indianCurrencyNumberFormat(rupee) {
    string explore_remaining_units = "";
    if (rupee.length() > 3) {
        last_three_digits = rupee.substring((rupee.length()-3), rupee.length());
        remaining_units = rupee.substring(0, (rupee.length()-3)); 
        remaining_units =  ((remaining_units.length()) % 2 == 1) ? "0"+remaining_units : remaining_units; 
        split_rupee = remaining_units.split("(?<=^(.{2})+)")
        for (i = 0; i < sizeof(split_rupee); i++) {
          explore_remaining_units += ((i == 0) ? ( (int) split_rupee[i]+"," ) : ( split_rupee[i]+"," ));  
        }
        formatted_rupee = explore_remaining_units+last_three_digits;
    } else {
        formatted_rupee = rupee;
    }
    return formatted_rupee; 
}

Und in PHP:

function indianCurrencyNumberFormat($rupee) {
    $explore_remaining_units = "";
    if (strlen($rupee) > 3) {
        $last_three_digits = substr($rupee, strlen($rupee) - 3, strlen($rupee));
        $remaining_units = substr($rupee, 0, strlen($rupee) - 3); 
        $remaining_units = (strlen($remaining_units) % 2 == 1) ? "0".$remaining_units : $remaining_units; 
        $split_rupee = str_split($remaining_units, 2);
        for ($i = 0; $i < sizeof($split_rupee); $i++) {
          $explore_remaining_units .= (($i == 0) ? ( (int) $split_rupee[$i] . "," ) : ( $split_rupee[$i] . "," ));  
        }
        $formatted_rupee = $explore_remaining_units.$last_three_digits;
    } else {
        $formatted_rupee = $rupee;
    }
    return $formatted_rupee; 
}

Weitere Details finden Sie hier

0
user3693466
import Java.util.*;

public class string1 {

     public static void main(String args[])
     {
         int i,j;
         boolean op=false;

         StringBuffer sbuffer = new StringBuffer();
         Scanner input = new Scanner(System.in);
         System.out.println("Enter a string");
         sbuffer.append(input.nextLine());

         int length=sbuffer.length();
         if(sbuffer.length()<3)
         {
             System.out.println("string="+sbuffer);
         }
         else
         {
             for ( i = sbuffer.length(); i >0; i--) 
             {

                 if (i==length-3)
                 {
                     sbuffer.insert(i, ",");
                      op=true;
                 }
                 while(i>1 && op==true)
                 {
                     i=i-2;

                     if(i>=1)
                     {

                     sbuffer.insert(i, ",");
                     }
                 }
             }

         }
         System.out.println("string="+sbuffer);
     }
}
0
Amit gupta

Es ist eine bessere Antwort und arbeitet dynamisch, anstatt manuell ein einzelnes Gebietsschema im Code anzugeben.

public String convertToDefaultCurrencyFormat(String amountToConvert){
    NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.getDefault());
    String moneyString = formatter.format(Double.valueOf(amountToConvert));
    return moneyString;
}   

für indische Rupien Formatwechsel Sprache in Ihrem Android-Gerät:

Setting > Language & Input Settings > wähle English(India)

Ausgabe:

₹10,00,000 (Starting with Indian Rupee symbol)

Unter Android ist android.icu.text.NumberFormat nur nach Stufe 24 verfügbar. Um die niedrigere Version zu unterstützen, habe ich meine eigene Methode in Java geschrieben.

public static String formatIndianCommaSeparated(long rupee){
    // remove sign if present
    String raw = String.valueOf(Math.abs(rupee));
    int numDigits = raw.length();
    StringBuilder sb = new StringBuilder(raw);
    // Reverse the string to start from right most digits
    sb = sb.reverse();
    // Counter to keep track of number of commas placed
    int commas = 0;
    for (int i=0; i<numDigits; i++){
        // Insert a comma if i is in the range [3, 5, 7, 9, ...)
        if (i % 2 == 1 && i != 1 ){
            sb.insert(i+commas, ",");
            commas++;
        }
    }
    // Reverse the string back to get original number
    String sign = (rupee < 0) ? "-" : "";
    return sign + sb.reverse().toString();
}
0
ankit209