আমি কীভাবে জেএসপি / জাভাতে দ্বিগুণ থেকে পুরো এবং ভগ্নাংশ অংশ পেতে পারি? যদি মানটি 3.25 হয় তবে আমি পেতে চাই fractional =.25
,whole = 3
আমরা জাভাতে এটি কীভাবে করতে পারি?
আমি কীভাবে জেএসপি / জাভাতে দ্বিগুণ থেকে পুরো এবং ভগ্নাংশ অংশ পেতে পারি? যদি মানটি 3.25 হয় তবে আমি পেতে চাই fractional =.25
,whole = 3
আমরা জাভাতে এটি কীভাবে করতে পারি?
উত্তর:
http://www.java2s.com/Code/Java/Data-Type/Obtainingtheintegerandfractionalparts.htm
double num;
long iPart;
double fPart;
// Get user input
num = 2.3d;
iPart = (long) num;
fPart = num - iPart;
System.out.println("Integer part = " + iPart);
System.out.println("Fractional part = " + fPart);
আউটপুট:
Integer part = 2
Fractional part = 0.2999999999999998
2.3
, তবে অবশ্যই তা নয় 2.3
। আপনি যদি 10 টির বেশি বৈধ সংখ্যা না চান তবে আউটপুট নিয়ে কোনও সমস্যা নেই। আপনার যা দরকার তা হ'ল প্রতিটি আউটপুটে (যেমন, ফর্ম্যাট %.9f
) কিছুটা গোল হয় যা সাধারণত ব্যথার চেয়ে কম হয় BigDecimal
। এখানে একমাত্র সমস্যা হ'ল উপচে পড়া।
(long)1.0e100
আপনি ০ পাবেন you অনেক সময় আপনার দ্বিগুণ মূল্য প্রয়োজন কেবল "মেঝে" যার জন্য রয়েছে floor()
। আপনি যদি উভয় ইন্টিগ্রাল এবং ভগ্নাংশ অংশ ব্যবহার করতে চান modf()
। সত্যিই, এটি একটি খারাপ উত্তর।
double value = 3.25;
double fractionalPart = value % 1;
double integralPart = value - fractionalPart;
%
মডুলো ( -3.25 % 1 == 0.75
) এবং জাভা, ফোর্টরান, সি এবং সি ++ এর মতো অন্যান্য ভাষা ব্যবহার %
করে, এর অর্থ বাকী অংশ ( -3.25 % 1 == -0.25
) ব্যবহার করে । উইন্ড্রাইডার সম্ভবত এটি অযথার জন্য পাইথন আরপিএলে টাইপ করেছে, তবে এই উত্তরটি বিভ্রান্তিকর কারণ এই প্রশ্নটি জেভিএম সম্পর্কে।
যেহেতু 1 বছরের পুরানো এই প্রশ্নটি এমন কেউ দ্বারা লাথি মেরেছিল যিনি প্রশ্নের বিষয়টিকে সংশোধন করেছেন, এবং এই প্রশ্নটির সাথে ট্যাগ করা হয়েছে jsp , এবং এখানে কেউ জেএসপি লক্ষ্যবস্তু উত্তর দিতে সক্ষম হয় নি, এখানে আমার জেএসপি-লক্ষ্যযুক্ত অবদান রয়েছে।
ব্যবহারের JSTL (ঠিক ড্রপ jstl-1.2.jar মধ্যে /WEB-INF/lib
) FMT taglib। একটা ব্যাপার <fmt:formatNumber>
ট্যাগ অবলম্বন দিতে তুমি আসলে কি চান এবং সাহায্যে একটি বেশ সহজ পদ্ধতিতে maxFractionDigits
এবংmaxIntegerDigits
বৈশিষ্ট্যের সাহায্যে।
এখানে একটি এসএসসিসিই রয়েছে , কেবল এটি অনুলিপি করুন।
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%
// Just for quick prototyping. Don't do this in real! Use servlet/javabean.
double d = 3.25;
request.setAttribute("d", d);
%>
<!doctype html>
<html lang="en">
<head>
<title>SO question 343584</title>
</head>
<body>
<p>Whole: <fmt:formatNumber value="${d}" maxFractionDigits="0" />
<p>Fraction: <fmt:formatNumber value="${d}" maxIntegerDigits="0" />
</body>
</html>
আউটপুট:
পুরো: 3
ভগ্নাংশ: .25
এটাই. কাঁচা জাভা কোডের সাহায্যে এটি ম্যাসেজ করার দরকার নেই।
আসল প্রশ্নটি ভগ্নাংশ এবং পুরো অংশের পরিবর্তে সূচক এবং ম্যান্টিসার জন্য জিজ্ঞাসা করেছিল।
দ্বিগুণ থেকে এক্সপেনেন্ট এবং ম্যান্টিসা পেতে আপনি এটিকে আইইইই 754 উপস্থাপনায় রূপান্তর করতে পারেন এবং এই জাতীয় বিটগুলি বের করতে পারেন:
long bits = Double.doubleToLongBits(3.25);
boolean isNegative = (bits & 0x8000000000000000L) != 0;
long exponent = (bits & 0x7ff0000000000000L) >> 52;
long mantissa = bits & 0x000fffffffffffffL;
মূল যুক্তি আপনাকে প্রথমে দশমিক বিন্দুর পরে কতগুলি সংখ্যা রয়েছে তা সন্ধান করতে হবে।
এই কোড 16 সংখ্যা পর্যন্ত যে কোনও সংখ্যার জন্য কাজ করে। আপনি যদি বিগডিসিমাল ব্যবহার করেন তবে আপনি এটি 18 টি সংখ্যা পর্যন্ত চালাতে পারেন। ভেরিয়েবল "নাম" এ ইনপুট মান (আপনার নম্বর) রাখুন, উদাহরণ হিসাবে আমি এটি হার্ড কোড করে রেখেছি।
double num, temp=0;
double frac,j=1;
num=1034.235;
// FOR THE FRACTION PART
do{
j=j*10;
temp= num*j;
}while((temp%10)!=0);
j=j/10;
temp=(int)num;
frac=(num*j)-(temp*j);
System.out.println("Double number= "+num);
System.out.println("Whole part= "+(int)num+" fraction part= "+(int)frac);
আইএনইই ডাবল ভাসমান পয়েন্ট সংখ্যার মান্টিসা এবং এক্সপোজনটি এমন মান
value = sign * (1 + mantissa) * pow(2, exponent)
মান্টিসা যদি 0.101010101_base 2 ফর্মের হয় (যেমন এর সর্বাধিক তাত্পর্যপূর্ণ বিটটি বাইনারি পয়েন্টের পরে স্থানান্তরিত হয়) এবং ঘর্ষণটি পক্ষপাতের জন্য সামঞ্জস্য করা হয়।
১.6 থেকে, জাভা.লং.ম্যাথ পক্ষপাতহীন ঘাঁটিঘাঁটি পেতে (গেটএক্সপোনেন্ট (ডাবল) বলা হয়) পাওয়ার জন্য একটি সরাসরি পদ্ধতিও সরবরাহ করে
তবে, আপনি যে নম্বরগুলির জন্য জিজ্ঞাসা করছেন সেগুলি হ'ল সংখ্যার অবিচ্ছেদ্য এবং ভগ্নাংশের অংশ, যা ব্যবহার করে প্রাপ্ত হতে পারে
integral = Math.floor(x)
fractional = x - Math.floor(x)
যদিও আপনি নেতিবাচক সংখ্যার সাথে অন্যরকম আচরণ করতে চান (floor(-3.5) == -4.0)
দুটি অংশ চান তা নির্ভর করে আপনি করতে চান।
আমি দৃ strongly়ভাবে পরামর্শ দিচ্ছি যে আপনি এই ম্যান্টিসাকে এবং বেদীটিকে কল করবেন না।
[সম্পাদনা করুন: মূলত প্রশ্নটি জিজ্ঞাসা করেছিল যে কীভাবে ম্যান্টিসা এবং কাফের পেতে হবে]]
আসল মান্টিসা / এক্সপোনেন্ট পাওয়ার জন্য যেখানে এন
exponent = int(log(n))
mantissa = n / 10^exponent
অথবা, আপনি যে উত্তরটি খুঁজছিলেন তা পেতে:
exponent = int(n)
mantissa = n - exponent
এগুলি ঠিক জাভা নয় তবে রূপান্তর করা সহজ হওয়া উচিত।
পূর্ণসংখ্যার অংশটি সাধারণ ingালাই থেকে এবং ভগ্নাংশের জন্য - স্ট্রিং বিভাজন:
double value = 123.004567890
int integerPart = (int) value; // 123
int fractionPart =
Integer.valueOf(String.valueOf(value)
.split(".")[1]); // 004567890
/**
* To control zeroes omitted from start after parsing.
*/
int decimals =
String.valueOf(value)
.split(".")[1].length(); // 9
আপনার নম্বরটি 2.39999999999999 হলে কী হবে। আমি মনে করি আপনি সঠিক দশমিক মান পেতে চান। তারপরে বিগডিসিমাল ব্যবহার করুন:
Integer x,y,intPart;
BigDecimal bd,bdInt,bdDec;
bd = new BigDecimal("2.39999999999999");
intPart = bd.intValue();
bdInt = new BigDecimal(intPart);
bdDec = bd.subtract(bdInt);
System.out.println("Number : " + bd);
System.out.println("Whole number part : " + bdInt);
System.out.println("Decimal number part : " + bdDec);
যেহেতু fmt:formatNumber
ট্যাগটি সর্বদা সঠিক ফল দেয় না, তাই এখানে আরেকটি জেএসপি-কেবল পদ্ধতির উপস্থিতি রয়েছে: এটি কেবল সংখ্যাকে স্ট্রিং হিসাবে ফর্ম্যাট করে এবং স্ট্রিংয়ের বাকী গণনা করে, কারণ এটি সহজ এবং আরও ভাসমান পয়েন্ট জড়িত না arithmetics।
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%
double[] numbers = { 0.0, 3.25, 3.75, 3.5, 2.5, -1.5, -2.5 };
pageContext.setAttribute("numbers", numbers);
%>
<html>
<body>
<ul>
<c:forEach var="n" items="${numbers}">
<li>${n} = ${fn:substringBefore(n, ".")} + ${n - fn:substringBefore(n, ".")}</li>
</c:forEach>
</ul>
</body>
</html>
fmt:formatNumber
তার যুক্তি গোল করে, যা এই ক্ষেত্রে চাওয়া হয় না।
গৃহীত উত্তর -0 এবং -1.0 এর মধ্যে নেতিবাচক সংখ্যার জন্য ভাল কাজ করে না এছাড়াও ভগ্নাংশের অংশটিকে নেতিবাচকও দেয়।
উদাহরণস্বরূপ: -0,35 নম্বরের জন্য
আয়
পূর্ণসংখ্যা অংশ = 0 ভগ্নাংশ অংশ = -0.35
যদি আপনি জিপিএস সমন্বয় নিয়ে কাজ করে থাকেন তবে পূর্ণসংখ্যার অংশে সাইনামের ফলস্বরূপ ফলাফল পাওয়া ভাল:
পূর্ণসংখ্যা অংশ = -0 ভগ্নাংশ অংশ = 0.35
থিস নম্বরগুলি জিপিএস স্থানাঙ্কের জন্য উদাহরণস্বরূপ ব্যবহৃত হয়, যেখানে ল্যাট বা লং পজিশনের জন্য গুরুত্বপূর্ণ সাইনাম
কোড প্রস্তাব করুন:
double num;
double iPart;
double fPart;
// Get user input
num = -0.35d;
iPart = (long) num;
//Correct numbers between -0.0 and -1.0
iPart = (num<=-0.0000001 && num>-1.0)? -iPart : iPart ;
fPart = Math.abs(num - iPart);
System.out.println(String.format("Integer part = %01.0f",iPart));
System.out.println(String.format("Fractional part = %01.04f",fPart));
আউটপুট:
Integer part = -0
Fractional part = 0,3500
জাভা 8, যেহেতু আপনি ব্যবহার করতে পারেন Math.floorDiv
।
এটি বৃহত্তম (ইতিবাচক অনন্তের নিকটতম) ফেরত দেয় int
মানটি প্রদান করে যা বীজগণিত ভাগফলের চেয়ে কম বা সমান।
কিছু উদাহরণ:
floorDiv(4, 3) == 1
floorDiv(-4, 3) == -2
বিকল্পভাবে, /
অপারেটরটি ব্যবহার করা যেতে পারে:
(4 / 3) == 1
(-4 / 3) == -1
তথ্যসূত্র:
String value = "3.06";
if(!value.isEmpty()){
if(value.contains(".")){
String block = value.substring(0,value.indexOf("."));
System.out.println(block);
}else{
System.out.println(value);
}
}
// target float point number
double d = 3.025;
// transfer the number to string
DecimalFormat df = new DecimalFormat();
df.setDecimalSeparatorAlwaysShown(false);
String format = df.format(d);
// split the number into two fragments
int dotIndex = format.indexOf(".");
int iPart = Integer.parseInt(format.substring(0, dotIndex)); // output: 3
double fPart = Double.parseDouble(format.substring(dotIndex)); // output: 0.025
ঠিক আছে এটি হতে পারে দেরী, তবে আমি মনে করি সেরা এবং আরও সঠিক পদ্ধতির বিগডিসিমাল ব্যবহার করা হচ্ছে
double d = 11.38;
BigDecimal bigD = BigDecimal.valueOf(d);
int intPart = bigD.intValue();
double fractionalPart = bigD.subtract(BigDecimal.valueOf(intPart)).doubleValue();
System.out.println(intPart); // 11
System.out.println(fractionalPart ); //0.38
input (5.03)
output int = 5 , fractional = 0.0299999
, আমরা ইনপুট এবং আউটপুট সম্পর্কে কথা বলছি, আপনি মূল্য রাখবেন এবং এর মান 0.001% না হারিয়ে ফিরে পাবেন! এবং এটি সঠিক, বিভ্রান্তিকর নয়!
public class MyMain2 {
public static void main(String[] args) {
double myDub;
myDub=1234.5678;
long myLong;
myLong=(int)myDub;
myDub=(myDub%1)*10000;
int myInt=(int)myDub;
System.out.println(myLong + "\n" + myInt);
}
}