ফ্লোটিং-পয়েন্ট সংখ্যা হলো বাস্তব সংখ্যা: এদের একটি ভগ্নাংশ অংশ থাকতে পারে। মেশিনে এগুলোকে বাইনারি বিটের একটি প্যাটার্ন হিসেবে উপস্থাপন করা হয়, IEEE-754 স্পেসিফিকেশন ব্যবহার করে। লোকে ফ্লোটিং-পয়েন্ট সংখ্যাগুলোকে ফ্লোট বলে ডাকে।
ফ্লোটিং-পয়েন্ট সংখ্যা সর্বদা সাইনড হয়। সাইনডনেস মানে হলো সংখ্যাটির বিটগুলোর একটি সংরক্ষিত রাখা, যা নির্দেশ করে সংখ্যাটি ঋণাত্মক কি না।
ফ্লোটিং-পয়েন্ট সংখ্যার একটি বিট প্রস্থ থাকে, যা আসলে সেই সংখ্যা তৈরি করা বিটের সংখ্যা। এটি সেই টাইপ দিয়ে উপস্থাপন করা যায় এমন মানের পরিসর ও নির্ভুলতাকে প্রভাবিত করে।
Rust-এ ২টি ফ্লোটিং-পয়েন্ট প্রিমিটিভ টাইপ আছে: f32 এবং f64. f-এর পরে যে সংখ্যা থাকে, তা বিট প্রস্থ নির্দেশ করে। অন্য ভাষায়, f32-কে কখনও "সিঙ্গেল-প্রিসিশন" বলা হয়, আর f64-কে কখনও "ডাবল-প্রিসিশন" বলা হয়।
সাধারণভাবে, f64 ব্যবহার করুন: আধুনিক কনজিউমার হার্ডওয়্যারে এটি f32-এর মতোই দ্রুত, আর ফ্লোটিং-পয়েন্ট অনির্ভুলতার সংঘটন লক্ষণীয়ভাবে হ্রাস করে।
আপনার যদি অসীম-নির্ভুলতার মূলদ সংখ্যা দরকার হয়, তাহলে আপনি num-rational ক্রেট ব্যবহার করতে পারেন, যা একটি BigRational টাইপ দেয়। আপনার যদি নির্দিষ্ট-নির্ভুলতার দশমিক সংখ্যা দরকার হয়, তাহলে আপনি rust_decimal ক্রেট ব্যবহার করতে পারেন, যা একটি Decimal টাইপ দেয়।
Rust-এ কোনো অন্তর্নিহিত সাংখ্যিক রূপান্তর নেই। আপনার যদি ফ্লোট টাইপের মধ্যে কাস্ট করতে হয়, তাহলে দুটি মৌলিক কৌশল আছে: as কিওয়ার্ড, এবং From ও TryFrom ট্রেইট।
as কিওয়ার্ড ব্যবহার করা সহজ: expr as Type. তবে, as কাস্ট ব্যবহার করার সময় কিছু সতর্কতা ও সূক্ষ্মতা মনে রাখা দরকার।
ট্রেইট-ভিত্তিক কাস্টিং একটু জটিলতর, তবে বেশি নিরাপদ: রূপান্তর ট্রেইটগুলো কেবল যেখানে নিরাপদ সেখানেই ইমপ্লিমেন্ট করা হয়। উদাহরণস্বরূপ, f32 From<u8>, From<u16>, From<i8>, এবং From<i16> ইমপ্লিমেন্ট করে: এই টাইপগুলোর যেকোনো একটি দিয়ে উপস্থাপনযোগ্য যেকোনো মান f32-এ উপস্থাপনযোগ্য হওয়ার নিশ্চয়তা আছে। এটি f32::from(expr) বা expr.into()-এর মতো ব্যবহার করা যায়, যেখানে expr ওই টাইপগুলোর একটিতে রিজলভ করে।
ফ্লোটিং-পয়েন্ট মান রূপান্তর করার সময় as-কাস্টিং প্রায়শই পছন্দ করা হয়, শুধুমাত্র ট্রেইট-ভিত্তিক কাস্ট ইমপ্লিমেন্টেশনের তুলনামূলক ঘাটতির কারণে। ২০২০ সালের অক্টোবর অনুযায়ী, ফ্লোটিং-পয়েন্ট সংখ্যার জন্য TryFrom ইমপ্লিমেন্ট করা হয়নি। f32 থেকে f64-এ as-কাস্টিং লসলেস। এর বিপরীতটি লসি, তবে ক্ষতি কমানোর উদ্দেশ্যে একটি নির্দিষ্ট কাস্টিং প্রোটোকল আছে।