আরে দশমিক স্থান ফর্ম্যাট করা


264

আমার একটি নম্বর আছে, উদাহরণস্বরূপ 1.128347132904321674821 যা আমি কেবলমাত্র দুটি দশমিক স্থান হিসাবে স্ক্রিনে আউটপুট (বা কোনও ফাইলের লিখিত) হিসাবে দেখাতে চাই। এক যে কিভাবে কাজ করে?

x <- 1.128347132904321674821

সম্পাদনা করুন:

এর ব্যবহার:

options(digits=2)

সম্ভাব্য উত্তর হিসাবে পরামর্শ দেওয়া হয়েছে। এক-সময় ব্যবহারের জন্য কোনও স্ক্রিপ্টের মধ্যে এটি নির্দিষ্ট করার কোনও উপায় আছে কি? আমি যখন এটি আমার স্ক্রিপ্টে যুক্ত করব তখন এটি অন্যরকম কিছু করবে বলে মনে হয় না এবং প্রতিটি সংখ্যার ফর্ম্যাট করতে আমি পুনরায় টাইপ করতে আগ্রহী নই (আমি একটি খুব বড় প্রতিবেদন স্বয়ংক্রিয় করছি)।

-

উত্তর: গোল (x, সংখ্যা = 2)


1
সম্পর্কিত প্রশ্ন: স্ট্যাকওভারফ্লো.com
শেন

যদি কোনও বিকল্প ব্যবহার করে (অঙ্কগুলি = 4), যা গণনা 4 টি সংখ্যার মধ্যে সীমাবদ্ধ করে না, তাই না? সেক্ষেত্রে এটি প্রোগ্রামগুলি কম কম নির্ভুল করে তুলবে। এটি মুদ্রিত হওয়ার পরে কেবল সংখ্যাটিই প্রভাবিত করে, সঠিক?
মাইকজেড 2'12

controls the number of digits to print when printing numeric values. It is a suggestion only. Valid values are 1...22 with default 7. See the note in print.default about values greater than 15.বিকল্পগুলি থেকে এটি কেবল আউটপুটকে প্রভাবিত করে।
ব্র্যান্ডন বার্টেলসেন 21

নোট যে round(23, digits=2)মুদ্রণ করবে 23এবং না 23.00। আপনি যদি পরবর্তীটি চান তবে
স্ট্যাকওভারফ্লো.com/

4
@ পলহুরলেউক, আমি মনে করি যতটা সম্ভব ন্যূনতম লাইব্রেরি ব্যবহার করার জন্য প্রোগ্রামিংয়ে এটি ভাল অনুশীলন। যে ব্যক্তি প্রতিটি তুচ্ছ প্রয়োজনের জন্য পৃথক গ্রন্থাগার ব্যবহার করে সে সাধারণত কোনও জগাখিচুড়ি, বড় ফাইল, বহনযোগ্যতার সমস্যা ইত্যাদির সাথে শেষ হয়
রদ্রিগো

উত্তর:


381

পটভূমি: এই পৃষ্ঠায় প্রস্তাবিত কয়েকটি উত্তর (উদাঃ signif,, options(digits=...)) গ্যারান্টি দেয় না যে সুনির্দিষ্ট সংখ্যার জন্য একটি নির্দিষ্ট সংখ্যক দশমিক প্রদর্শিত হয়। আমি অনুমান করি এটি আর এর একটি নকশা বৈশিষ্ট্য যার মধ্যে ভাল বৈজ্ঞানিক চর্চায় " উল্লেখযোগ্য পরিসংখ্যান " এর নীতির উপর ভিত্তি করে নির্দিষ্ট সংখ্যার অঙ্ক প্রদর্শন করা জড়িত । তবে অনেকগুলি ডোমেনে (উদাঃ, এপিএ শৈলী , ব্যবসায়িক প্রতিবেদন) বিন্যাসকরণের প্রয়োজনীয়তা নির্ধারণ করে যে নির্দিষ্ট পরিমাণে দশমিক স্থান প্রদর্শিত হয়। এটি প্রায়শই উল্লেখযোগ্য ব্যক্তির সাথে সংশ্লিষ্ট হওয়ার পরিবর্তে ধারাবাহিকতা এবং মানককরণের উদ্দেশ্যে করা হয়।

সমাধান :

নিম্নলিখিত কোডটি সংখ্যার জন্য ঠিক দুটি দশমিক স্থান দেখায় x

format(round(x, 2), nsmall = 2)

উদাহরণ স্বরূপ:

format(round(1.20, 2), nsmall = 2)
# [1] "1.20"
format(round(1, 2), nsmall = 2)
# [1] "1.00"
format(round(1.1234, 2), nsmall = 2)
# [1] "1.12"

আরও সাধারণ ফাংশনটি হ'ল xসংখ্যাটি যেখানে এবং kদশমিকের সংখ্যাটি হ'ল এটি। trimwsযে কোনও শীর্ষস্থানীয় সাদা স্থান সরিয়ে দেয় যা আপনার কাছে সংখ্যার ভেক্টর থাকলে কার্যকর হতে পারে।

specify_decimal <- function(x, k) trimws(format(round(x, k), nsmall=k))

যেমন,

specify_decimal(1234, 5)
# [1] "1234.00000"
specify_decimal(0.1234, 5)
# [1] "0.12340"

4
+1 কেবলমাত্র উত্তরটি আমার পক্ষে কাজ করেছে, সঠিকভাবে প্রিন্ট 0.0001করে0.00
টমাস এইচ

7
সংখ্যাগুলিকে কীভাবে অক্ষরগুলিতে রূপান্তরিত করে format()এবং কীভাবে ফাংশন prettyNum()রূপায়ণ করে তা আমাকে সর্বদা বিরক্ত করে । আপনি কীভাবে এটিকে সম্বোধন করবেন?
ওয়াল্ডির লিওনসিয়ো

প্রদর্শিত উদ্ধৃতিগুলির সাথে কী?
এফ.ওয়েবার

2
@JeromyAnglim আমি নোট সমাধান উপরে, দশমিক সামনে অক্ষরের সংখ্যা ফিক্সিং যেমন একটি সম্ভাব্য প্রান্ত-কেস অসুবিধা আছে যা format(c(10, 1), nsmall=1)উৎপাদনের "10.0" " 1.0"(নোট 1.0 সামনে নেতৃস্থানীয় স্থান। যেহেতু, sprintf()ফাংশন উপর বিন্যাস সুন্দর গ্যারান্টি বলে মনে হয় দশমিক যেমন উভয় পক্ষের sprintf(c(10,1), fmt = '%#.1f')যে বিরক্তিকর নেতৃস্থানীয় স্থান এবং আয় পরিত্রাণ পায় "10.0" "1.0"
নিকোলাস জি রেইচ

1
শীর্ষস্থানীয় স্থানগুলি দশমিক পয়েন্ট সারিবদ্ধ করার জন্য ডিজাইন করা বৈশিষ্ট্য যখন ফলাফলটি formatকলামে ব্যবহৃত হয়।
বাসিন্দা

34

আপনি xইচ্ছে মতো দশমিক স্থান পর্যন্ত একটি সংখ্যা বিন্যাস করতে পারেন । এখানে xঅনেক দশমিক স্থান সহ একটি নম্বর। মনে করুন আমরা এই সংখ্যাটির 8 টি দশমিক স্থান প্রদর্শন করতে চাই:

x = 1111111234.6547389758965789345
y = formatC(x, digits = 8, format = "f")
# [1] "1111111234.65473890"

এখানে format="f"এক্সএক্সএক্সএক্সএক্সএক্সএক্স বলে সাধারণ দশমিক স্থানে ভাসমান সংখ্যা এবং সংখ্যার digitsসংখ্যা নির্দিষ্ট করে। বিপরীতে, আপনি যদি কোনও পূর্ণসংখ্যার প্রদর্শন করতে চান তবে আপনি ব্যবহার করতে পারেন format="d"(অনেক পছন্দ sprintf)।


সর্বোচ্চ রেটযুক্ত উত্তর দিয়ে বিচারের জন্য ওপি কী জিজ্ঞাসা করছে ঠিক সে সম্পর্কে আমি অস্পষ্ট থাকা অবস্থায়, আমি সাহায্য করতে পারছিলাম না তবে পর্যবেক্ষণ করতে পারলাম না যে formatCএই উদ্দেশ্যে আমি কী ব্যবহার করি তা প্রায় একচেটিয়াভাবে। আমি মনে করি এই উত্তরটি ভাল এবং অপের অনুরোধ অনুযায়ী বেস আরে রয়েছে।
অ্যাডামো

আপনারা কেউ এই এক সাহায্য করতে পারে? stackoverflow.com/q/53279593/5224236
gpier

24

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

> # devtools::install_github("renkun-ken/formattable")
> library(formattable)
> x <- formattable(1.128347132904321674821, digits = 2, format = "f")
> x
[1] 1.13

ভাল জিনিসটি হ'ল, xএখনও একটি সংখ্যাযুক্ত ভেক্টর এবং আপনি একই ফর্ম্যাটিংয়ের সাথে আরও গণনা করতে পারেন।

> x + 1
[1] 2.13

আরও ভাল, অঙ্কগুলি হারিয়ে যায় না, আপনি যে কোনও সময় আরও সংখ্যার সাথে পুনরায় ফর্ম্যাট করতে পারেন :)

> formattable(x, digits = 6, format = "f")
[1] 1.128347

এমন একটি ছোট্ট ছোট্ট প্রিক আমাকে পুরো সকালে বগড করে। কোনও কারণে আর কেবল কিছু কলামের জন্য ডিসপ্লেটি গোল করে। আমারও এই ফিক্সটির প্রয়োজন ছিল কারণ আমাকেও সেই কলামগুলিতে গণনা করতে হয়েছিল। এইটা কাজ করে. ধন্যবাদ!
থিঠাকুড়ি

আমি যে কোনও বেসআর ফাংশনগুলির চেয়ে ফরম্যাটেবল পছন্দ করি। এটি সবচেয়ে বড় সুবিধা এটি পরিবর্তনশীলটিকে সংখ্যা হিসাবে ধরে রাখে retain
লাজার্স থারস্টন

22

2 দশমিক জায়গার জন্য ধরে ধরে যে আপনি শূন্যগুলি অনুসরণ করতে চান

sprintf(5.5, fmt = '%#.2f')

যা দেয়

[1] "5.50"

যেমন @ এমপ্যাগটি নীচে উল্লেখ করেছে, দেখে মনে হচ্ছে আর কখনও কখনও এটি এবং বৃত্তাকার পদ্ধতির সাথে অপ্রত্যাশিত মান দিতে পারে যেমন স্প্রিন্টফ (5.5550, fmt = '% # 2f') 5.55 নয়, 5.55 দেয়


1
তবে, স্প্রিন্টফ রাউন্ড হলেও স্প্রিন্টফ (5.5550, fmt = '% #। 2f') কিছুটা অপ্রত্যাশিত ফলাফল দেয়: 5.55। স্প্রিন্টফ (5.555000000001, এফএমটি = '% #। 2 এফ') 5.56 দেয়। এটি আর-এ গোল করে একটি সাধারণ "ইস্যু" হিসাবে উপস্থিত বলে মনে হয়, যেমন গোল হয়, এনএসমাল পদ্ধতিটি একই দেয়।
এমপ্যাগ

ধন্যবাদ @ এমপ্যাগ, আমার ধারণা ছিল না যে আর বাউন্ডারি নিয়ে গোল করে লড়াই করেছে, আমি মাত্র 5.565 দিয়ে চেষ্টা করেছি যা 5.545 রাউন্ড ডাউন রয়েছে down আমি অনুমান করি যে এগুলিই তারা ভাসমান পয়েন্টের ব্যাখ্যা ব্যবহার করে। আমি মনে করি না যে আমি অন্যান্য ভাষায় এই আচরণটি দেখেছি যার অনুমান যে তারা একটি অন্তর্নির্মিত কাজ করেছে
মার্ক অ্যাডামসন

আমি বরং এটি মনে করি যে তারা ইচ্ছাকৃতভাবে নির্ভুলতার মাত্রায় সীমাবদ্ধ হিসাবে মানগুলি চিকিত্সা করছে। তারা অনুমান করছেন যে 5.555 এর একটি মান 5.5546 এর "আসল" মানের ফলে 5.5554 হিসাবে প্রাপ্ত হওয়ার সম্ভাবনাটি ঠিক কম। তবে, আপনি যদি এই ধরণের রাউন্ডিং গেমটি চালিয়ে যান, আপনি যদি একবারে এটির একটি সংখ্যা করেন তবে 5.444445 টি (অনির্ধারিত) "6" হিসাবে শেষ হতে পারে। তবে আপনি সঠিক হতে পারেন যে বাইনারি উপস্থাপনের বিষয়টি 5.55 এর নিচে বা তার কিছুটা কম হতে পারে।
এমপ্যাগ

হ্যাঁ, আমি মনে করি এটি যদি উদ্দেশ্যমূলক হয় তবে এটি 5.565 এবং 5.545 এর মধ্যেও সুসংগত হবে। 'এলোমেলোতা' আমাকে পরামর্শ দেয় এটি একটি ভাসমান পয়েন্ট উপস্থাপনের জিনিস।
অ্যাডামসনকে

আপনারা কেউ এই এক সাহায্য করতে পারে? stackoverflow.com/q/53279593/5224236
gpier

8

এরকম কিছু :

options(digits=2)

সংখ্যার বিকল্পের সংজ্ঞা:

digits: controls the number of digits to print when printing numeric values.

কোনও স্ক্রিপ্ট চলাকালীন এটিকে গতিশীল সেট করার কোনও উপায় আছে কি?
ব্র্যান্ডন বার্টেলসেন

এটি আর কনসোলের মধ্যে আউটপুট দেওয়ার জন্য কাজ করে, তবে আমার স্ক্রিপ্টের মধ্যে কাজ করে না (তারা এখনও .1289273982 নিয়ে আসে)
ব্র্যান্ডন বার্টেলসেন

1
আমি একটি অদ্ভুত আচরণ পেয়েছি, digitsবিকল্পটি দশমিকের পরে অঙ্কের সংখ্যা নির্ধারণ করবে বলে মনে হচ্ছে না। উদাহরণস্বরূপ, যখন আমি বিকল্পগুলি সেট করি (অঙ্কগুলি = 2), তারপরে 7.25 ফলাফল মুদ্রণ 7.2, 1234.25 এর আউটপুটে 1234 হয়ে যায়, এবং 0.25 0.25 অবধি থাকে। এর সাথে ইন্টারঅ্যাক্ট করার আরও একটি বিকল্প আছে কি?
ম্যাক্সিম.কে

8

ফাংশন প্রশংসনাম, ফর্ম্যাট চেক করুন

ট্রায়ালিং জিরো (উদাহরণস্বরূপ 123.1240) ব্যবহার করতে sprintf(x, fmt='%#.4g')


@ 42 আমি শেখার পক্ষে পরামর্শ দেব sprintf, এটি মূলত ফর্ম্যাট করার জন্য একটি কাঠামো
জাঙ্গোরেকি

1
@ জাঙ্গোরেকি আমি আপনার বক্তব্য সম্পর্কে নিশ্চিত নই আমি যা করেছি (5+ বছর আগে) তার বানান সংশোধনের পরামর্শ দেওয়া হয়েছিল।
আইআরটিএফএম

@ ৪২ আমি আপনাকে যুক্তি দিয়ে অভিযোগ করতে কঠোর করেছি fmt, দুঃখিত!
jangorecki

আমি মনে করি ওপি স্থির অঙ্কগুলির চেয়ে দশমিক জায়গাগুলির পরে। মনে হচ্ছে gআপনার উত্তরটি স্থির সংখ্যাগুলির জন্য, fআরও ভাল কাজ করে ।
এডামসন

5

আপনি যদি নির্দিষ্ট সংখ্যার তুলনায় উল্লেখযোগ্য সংখ্যা পছন্দ করেন তবে সাইনীফ কমান্ডটি কার্যকর হতে পারে:

> signif(1.12345, digits = 3)
[1] 1.12
> signif(12.12345, digits = 3)
[1] 12.1
> signif(12345.12345, digits = 3)
[1] 12300

1
ধন্যবাদ পল। এই দু'টি ঠিক আমি যা খুঁজছিলাম তা ছিল না, তবে সইনিফ আমাকে গোল করে নিয়ে গেছে () যা আমার প্রয়োজন ঠিক তাই। চিয়ার্স,
ব্র্যান্ডন বার্টেলসেন 21 ই

34
Error: could not find function "fixed"
থমাস

signifপ্রদত্ত নির্দিষ্ট সংখ্যার জন্য কাজ করে, তবে আমি অনুমান করি যে সাধারণ প্রয়োগিত সমস্যাটি হ'ল যখন আপনাকে ঠিক দুটি দশমিক স্থান প্রদর্শন করতে হবে তবে সময়টি আগে সংখ্যাটি কী তা আপনি জানেন না। সেক্ষেত্রে, signifপ্রকৃত সংখ্যার উপর নির্ভর করে দশমিক বিভিন্ন সংখ্যার দেব।
জেরোমি অ্যাংলিম

3
স্থির কোথাও পাওয়া যায় না। দয়া করে এটি ঠিক করুন, অন্যথায় এই বিভ্রান্তিমূলক উত্তর মুছে ফেলা উচিত।
হ্যালো ওয়ার্ল্ড

@ জারোমিআংলিম 3SF চাইলে আমরা কীভাবে এটি ঠিক করব? কখনও কখনও এটি আমাকে 3sf, অন্যান্য সময় 4sf ইত্যাদি দেয় আমরা কীভাবে এটি ঠিক করব?
christouandr7

4

ফাংশনটি formatC()একটি সংখ্যাকে দুটি দশমিক স্থানে ফর্ম্যাট করতে ব্যবহার করা যেতে পারে। ফলাফলের মানগুলি পিছনে জিরো অন্তর্ভুক্ত করার পরেও এই ফাংশনটি দ্বারা দুটি দশমিক স্থান দেওয়া হয়।


3

আমি বলটি মুদ্রণের জন্য দশমিক জায়গাগুলির জন্য এই বৈকল্পিকটি ব্যবহার করছি:

# format numeric value to K decimal places
formatDecimal <- function(x, k) format(round(x, k), trim=T, nsmall=k)

2

নোট করুন যে আর এর সংখ্যাসূচক অবজেক্টগুলি দ্বিগুণ নির্ভুলতার সাথে সঞ্চিত রয়েছে , যা আপনাকে (মোটামুটিভাবে) 16 দশমিক সংখ্যক নির্ভুলতা সরবরাহ করে - বাকী শব্দগুলি হবে। আমি সম্মতি দিচ্ছি যে উপরে প্রদর্শিত সংখ্যাটি সম্ভবত একটি উদাহরণের জন্য, তবে এটি দীর্ঘ ২২ ডিজিটের।


3
নিশ্চিত হয়েছে, এটি কেবল উদাহরণের জন্য। আমি কীবোর্ড ছড়িয়েছি।
ব্র্যান্ডন বার্টেলসেন

1

আমার কাছে মনে হচ্ছে এমন কিছু হতে চাই

library(tutoR)
format(1.128347132904321674821, 2)

একটু অনলাইন সহায়তা


আমি এটি খুঁজে পেয়েছি তবে এটির জন্য একটি প্যাকেজ দরকার, আমি বেস প্যাকেজের মধ্যে কিছু খুঁজছি।
ব্র্যান্ডন বার্টেলসেন

2
@ ব্র্যান্ডন, ফর্ম্যাট () বেসের অংশ। আর খুলুন আর টাইপ? ফর্ম্যাট ... কোনও প্যাকেজ দরকার নেই।
জেডি লং

হৃদয়, আপনি কি এই আউটপুট তাকান? [1] "1.128347" অন্যথায়, বেস প্যাকেজটিতে থাকা সম্পর্কে আপনি ঠিক ঠিক বলেছেন, আমার খারাপ।
ব্র্যান্ডন বার্টেলসেন

1
format.default(x, digits = 2)প্রদত্ত লিঙ্কটির উপর ভিত্তি করে সম্ভবত অন্ধকারে কেবল একটি শট চেষ্টা করুন । সেই তথ্যটি হ'ল আমি সাধারণত ডকুমেন্টেশনের জন্য যা পড়ে থাকি তার অভাব হয়, আমিও মুদ্রিত আউটপুটগুলি দেখতে আশা করি।
টিম মিয়ারস

সবেমাত্র লক্ষ্য করা গেছে যে আপনার লিঙ্কটি টুটোআর ডকুমেন্টেশনে নির্দেশ করে, যা বেসের অংশ নয়।
ব্র্যান্ডন বার্টেলসেন

1

আপনি যদি কেবল একটি সংখ্যা বা একটি তালিকা গোল করতে চান তবে কেবল ব্যবহার করুন

round(data, 2)

তারপরে, ডেটা গোলাকার হবে 2 দশমিক স্থানে।

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