Отображение валюты в индийском формате нумерации - PullRequest
47 голосов
/ 21 марта 2011

У меня есть вопрос о форматировании валюты рупии (индийская рупия - INR).

Обычно значение типа 450500 форматируется и отображается как 450,500.В Индии то же значение отображается как 4,50,500

Например, числа здесь представлены как:

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

См. Индийская система нумерации

Разделители идут после двух цифр, за исключением последнего набора, который исчисляется тысячами.

Я искал в Интернете, и люди попросили использовать локаль en_GB или шаблон #,##,##,##,##0.00

Я попробовал это на JSTL, используя следующий тег:

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

Но, похоже, это не решает проблему.Любая помощь в этом вопросе будет принята с благодарностью.

Спасибо

Ответы [ 15 ]

1 голос
/ 01 декабря 2016
//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);
0 голосов
/ 02 июня 2017

ALTER FUNCTION [dbo]. [Udf_CurrencyFormat] (@ UC varchar (50)) ВОЗВРАЩАЕТ varchar (50) КАК НАЧИНАЕТСЯ объявить @FC varchar (50), @ Scale varchar (3), @ i bigint = 1, @ a int = 3, @ b int = 2, @ WhileLength bigint, @ UCScale varchar (50), @Con varchar (20) set @ Scale = charindex ('.', @ UC) - если число имеет '.'затем значение иначе '0', если (@Scale! = '0') начать set @ UCScale = @ UC set @ Con = substring (@ UCScale, charindex ('.', @ UCScale), 3) set @ UC = substring (@ UC, 0, charindex ('.', @ UC)) - конец подстроки if (cast (len (@UC) as bigint)% 2! = 0) - если нечетное начало set @ WhileLength = (cast (len)(@UC) как bigint) -3) / 2 while (@i <= @ whileLength) - length-3/2 = 3, если длина равна 9 (приведение (len (@UC) как bigint) -3) / 2начать набор @ a = 3 * @ i установить @UC = вещи (@ UC, @ a, 0, ',') установить @ i = @ i + 1 конец - в то время как установить @ FC = @ конец UC - если нечетноМасштабируйте '0' иначе, если (приведение (len (@UC) как bigint)% 2 = 0) - если даже начать, установите @WhileLength = (((приведение (len (@UC) как bigint) -1) -3)/ 2) +1, в то время как (@i <= @ WhileLength) начинаются, если (@ i = 1) начинаются, устанавливают @ UC = вещи (@ UC, @ b, 0, ',') и заканчивают, начинают набор @ b = @ b+3 set @ UC = stuff (@ UC, @ b, 0, ',') end set @ i = @ i + 1 end set @ FC = @ UC end if (@Scale! = '0') begin set @FC = @ FC + @ Con end --if (@Scale! = '0') --set @ FC = @ UC return @FC END </p>

0 голосов
/ 20 января 2017

Лучше ответить и работает динамически, вместо того, чтобы указывать одну локаль в коде вручную.

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

для изменения формата индийских рупий Язык на вашем устройстве Android:

Setting > Language & Input Settings > выберите English(India)

Выход:

₹10,00,000 (Starting with Indian Rupee symbol)
0 голосов
/ 27 сентября 2016
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 голосов
/ 31 мая 2014

Методы по умолчанию в существующих библиотеках могут показывать только разделитель тысяч. поэтому нам нужно написать пользовательскую функцию для этого. Вы можете использовать несколько операций с подстрокой, чтобы получить желаемый результат.

В Яве

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; 
}

И в 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; 
}

Подробнее см. здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...