হাজারে হাজারে কমা দিয়ে স্ট্রিংকে পূর্ণসংখ্যায় রূপান্তর করা


181

আমি একটি পূর্ণসংখ্যা 35634646 কে হাজার "," রূপান্তর করতে চাই তাই এটি 35,634,646 হওয়া উচিত।

এটি করার দ্রুততম উপায় কী হবে?

উত্তর:


290
System.out.println(NumberFormat.getNumberInstance(Locale.US).format(35634646));
Output: 35,634,646

5
আমি যোগ করতে হবে import java.text.NumberFormat;
মাইক এস

6
এটি মার্কিন স্টাইলের গোষ্ঠীকরণকে বাধ্য করে যা সর্বদা ব্যবহার করে ,, তবে এর .পরিবর্তে গ্রুপিংয়ের জন্য এমন অঞ্চলগুলি রয়েছে । এক কথায়, লোকালকে হার্ড-কোডিং করা একটি খারাপ অভ্যাস হিসাবে বিবেচনা করা হয়।
হাই ঝাং

4
@ ড্রিমিংইনকোড এটির ভাল করার Locale.getCurrent()জন্য সমাধানটি হল
রজার আরভি

@ রোজারআরভিতে কোনও লোকাল.জেটকেন্দ্র নেই () কমপক্ষে অ্যান্ড্রয়েডে)
E.Akio

হ্যাঁ মার্কিন যুক্তরাষ্ট্রে বসবাস করেন না এমন 96% লোকের পক্ষে এটি সেরা উত্তর নয়
ডুমুর

152

আপনি দ্রুত চেয়েছেন, তবে সম্ভবত আপনার অর্থ "সেরা" বা "সঠিক" বা "আদর্শ"?

হাজার হাজারকে নির্দেশ করতে আপনি কমাও চেয়েছিলেন, তবে সম্ভবত আপনার অর্থ "আপনার ব্যবহারকারীর স্থানীয় রীতি অনুসারে সাধারণ মানব পাঠযোগ্য ফর্ম"?

আপনি এটি হিসাবে এটি:

    int i = 35634646;
    String s = NumberFormat.getIntegerInstance().format(i);

আমেরিকানরা "35,634,646" পাবে

জার্মানরা "35.634.646" পাবে

সুইস জার্মানরা "35'634'646" পাবে


প্রতিটি লোকেলের নম্বর প্যাটার্নটি আমি কোথায় পেতে পারি? আমি কোডটি পড়ার চেষ্টা করেছি তবে এটি কোথাও খুঁজে পাচ্ছি না
nhoxbypass


41

পূর্ণসংখ্যার:

int value = 100000; 
String.format("%,d", value); // outputs 100,000

দ্বৈত:

double value = 21403.3144d;
String.format("%,.2f", value); // outputs 21,403.31

স্ট্রিং.ফর্ম্যাট বেশ শক্তিশালী।

- পিছুজির প্রতিক্রিয়া অনুসারে সম্পাদিত ।


1
সুবিধা: কোনও "নতুন", আবর্জনা সংগ্রহকারীকে লোড করে না (ডেসিমাল ফরম্যাটের বিপরীতে)।
কনটাঙ্গো

একবার দেখুন String.format। এটি return new Formatter(l) ...ইত্যাদি দিয়ে শুরু হয় তাই আবর্জনা সংগ্রহকারী যুক্তি ততটা দৃ strong় নয় বলে মনে হয়।
স্কিনটোড

2
এটি আমার প্রিয় উত্তর, প্রশ্নটি পূর্ণসংখ্যার সাথে কাজ করতে বলে, সুতরাং কোডটি এখানে: int মান = 100000; স্ট্রিং.ফর্ম্যাট ("%, d", মান);
psuzzi

20
 int value = 35634646;
 DecimalFormat myFormatter = new DecimalFormat("#,###");
 String output = myFormatter.format(value);
 System.out.println(output);

আউটপুট: 35,634,646


1
আপনার প্যাটার্ন এর চেয়ে বেশি হওয়া উচিত নয় #,###, আপনি যদি ইওরোপীয় স্টাইল বিন্যাস করতে চান তবে আপনি ব্যবহার করতে পারেন #,##,###
আলী

7
@ অলি: আপনার বর্ণিত ফর্ম্যাটটি কেবল ভারতে ব্যবহৃত হয় এবং আমি কমপক্ষে 90% নিশ্চিত যে ভারত ইউরোপে নেই in
কেয়ারনারভন

আমি পেয়েছি ... ঠিক আছে, আপনার যদি ভারতীয় ফর্ম্যাটিং দরকার হয় তবে আপনি এটি করেন।
আলী

1
এটি স্থানীয়ভাবে নির্ভরশীল এবং যেখানে ডিফল্ট লোকাল একটি সহ হাজার হাজার পৃথক না করে সেখানে চালিত হলে সঠিক (প্রশ্ন অনুযায়ী) আউটপুট উত্পাদন করে না ,
আনতাক

17

অন্যান্য উত্তরগুলি সঠিক, তবে ব্যবহারের আগে আপনার লোকেলটি ডাবল-চেক করুন "%,d":

Locale.setDefault(Locale.US);
int bigNumber = 35634646;
String formattedNumber = String.format("%,d", bigNumber);
System.out.println(formattedNumber);

Locale.setDefault(new Locale("pl", "PL"));
formattedNumber = String.format("%,d", bigNumber);
System.out.println(formattedNumber);

ফলাফল:

35,634,646
35 634 646

3

এই সমাধানটি আমার পক্ষে কাজ করেছে:

NumberFormat.getNumberInstance(Locale.US).format(Integer.valueOf("String Your Number"));

3

%dকমা দিয়ে ফর্ম্যাট নির্দিষ্টকরণ ব্যবহার করুন :%,d

এটি এখন পর্যন্ত সবচেয়ে সহজ উপায়।


1

যদি জেএসপিতেও এটি করতে হয় তবে ব্যবহার করুন:

<fmt:formatNumber pattern="#,##0" value="${yourlist.yourintvalue}" var="formattedVariable" />
<c:out value="${formattedVariable}"></c:out>

একাধিক মান ব্যবহারের জন্য অবশ্যই:

<c:forEach items="${yourlist}" var="yourlist">

    <fmt:formatNumber pattern="#,##0" value="${yourlist.yourintvalue}" var="formattedVariable" />
    <c:out value="${formattedVariable}"></c:out>
</c:forEach>

1

আপনারা যারা "নাম্বার ফর্ম্যাট" বা "স্ট্রিং.ফর্ম্যাট" (ফ্রেমওয়ার্কের ভিতরে জাভা সীমিত সংস্করণ ব্যবহার করে) অ্যাক্সেস করতে পারবেন না তাদের জন্য এখানে একটি সমাধান রয়েছে। আশা করি এটি কার্যকর।

number= 123456789;
thousandsSeparator=",";
myNumberString=number.toString();   
numberLength=myNumberString.length;
howManySeparators=Math.floor((numberLength-1)/3)
formattedString=myNumberString.substring(0,numberLength-(howManySeparators*3))
while (howManySeparators>0)    {
formattedString=formattedString+thousandsSeparator+myNumberString.substring(numberLength-(howManySeparators*3),numberLength-((howManySeparators-1)*3));
howManySeparators=howManySeparators-1;    }

formattedString

আপনার
কোডটিতে

0

এক্সটেনশন ব্যবহার করুন

import java.text.NumberFormat

val Int.commaString: String
  get() = NumberFormat.getInstance().format(this)

val String.commaString: String
  get() = NumberFormat.getNumberInstance().format(this.toDouble())

val Long.commaString: String
  get() = NumberFormat.getInstance().format(this)

val Double.commaString: String
  get() = NumberFormat.getInstance().format(this)

ফলাফল

1234.commaString => 1,234
"1234.456".commaString => 1,234.456
1234567890123456789.commaString => 1,234,567,890,123,456,789
1234.456.commaString => 1,234.456

-1

আপনি ব্যবহার করতে পারবেন না

System.out.printf("%n%,d",int name);

কমে থাকা কমাটি printfআন্তঃতে কমা যোগ করা উচিত %d

এটি সম্পর্কে ইতিবাচক নয়, তবে আমার পক্ষে কাজ করে।


এটি আমার জন্য সংকলন করছে না
মিশাএক্স

"এটি সম্পর্কে ইতিবাচক নয়।" অর্থহীন।
রব শেফার্ড

-8

প্রথমে আপনাকে জেএসটিএল ট্যাগগুলি অন্তর্ভুক্ত করতে হবে: -

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 

পৃষ্ঠার শুরুতে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.