PDA

View Full Version : تبدیل دابل به یه چیز دیگه.



iman64
پنج شنبه 21 مرداد 1389, 18:59 عصر
سلام
دوستان من یه عبارتی دارم به این شکل 4996708306673204890 که وقتی دابل میشه اینجوری میشه 4.99670830667E+18.حالا من میخوام دابل شدش رو برگردونم به حالت قبل باید چی کار کنم.کسی راهی سراغ داره؟

LORD AELX
پنج شنبه 21 مرداد 1389, 20:47 عصر
سلام
دوستان من یه عبارتی دارم به این شکل 4996708306673204890 که وقتی دابل میشه اینجوری میشه 4.99670830667E+18.حالا من میخوام دابل شدش رو برگردونم به حالت قبل باید چی کار کنم.کسی راهی سراغ داره؟

نوع داده ای double در PHP دارای دقت 11 رقم دقت اعشار هستش. وقتی شما یک عدد غیر اعشاری رو به این فرمت save می کنید، بصورت default برنامه میاد یک رقم غیر اعشار در نظر میگیره و بقیه ارقام رو در قسمت اعشار درج می کنه (نمایش بصورت عدد علمی). عدد شما 19 رقم هستش که 18 رقم اون اعشاری شده ولی چون بیش از 11 رقم ذخیره نمیشه، 7 رقم سمت راست ارزش شون رو از دست می دهند و صفر فرض می شوند. E+18 هم که در واقع میگه عدد باید ضرب در 10 به توان 18 بشود.

پس شما در واقع با این تبدیل اومدید عدد 4996708306673204890 رو به 4996708306670000000 تبدیل کرده اید و باعث شددید 7 رقم سمت راست ارزش خود را از دست بدهند.

موفق باشید :قلب:

iman64
جمعه 22 مرداد 1389, 11:58 صبح
احسنت به شما
حالا اینو ببینید:

echo pow(10,18);من میخوام عددی رو که نشون بده دقیقاً همون چیزی باشه که هست یعنی

1000000000000000000
نه این شکلی

1.0E+18 اینو باید چی کار کنم.

LORD AELX
جمعه 22 مرداد 1389, 13:28 عصر
در اینصورت کافیه از دستور زیر استفاده کنید:


echo number_format(pow(10,18));


موفق باشید :قلب:

iman64
شنبه 23 مرداد 1389, 00:39 صبح
آقا میدونی مشکل من چیه.مشکل اینه که من از یک وب سرویس دارم استفاده میکنم.همه چی عالیه الا یه چیز.از طرف وب سرویس یه متغیر با مقدار رشته ای میاد برای من طوری که قبل از اینکه من ازش پرینت بگیرم دابلش رو بهم میده.حالا تو سیستم من ، نمیدونم چه اتفاقی می افته که این مقدار به صورت همون دابل ارسال میشه و من اینو نمیخوام.الآن تو asp.net این مشکل وجود نداره و مقدار به همون صورت ارسال شده نمایش داده میشه و کاری هم نداره که دابله یا رشته.اون دو عدد بالا فکر کنم مثالهای خوبی باشن برای این مورد.من میخوام که مقدار ارسال شده رو تغییر ماهیت نده.میشه جواب اینو هم بدید.

LORD AELX
شنبه 23 مرداد 1389, 14:02 عصر
آقا میدونی مشکل من چیه.مشکل اینه که من از یک وب سرویس دارم استفاده میکنم.همه چی عالیه الا یه چیز.از طرف وب سرویس یه متغیر با مقدار رشته ای میاد برای من طوری که قبل از اینکه من ازش پرینت بگیرم دابلش رو بهم میده.حالا تو سیستم من ، نمیدونم چه اتفاقی می افته که این مقدار به صورت همون دابل ارسال میشه و من اینو نمیخوام.الآن تو ASP.NET این مشکل وجود نداره و مقدار به همون صورت ارسال شده نمایش داده میشه و کاری هم نداره که دابله یا رشته.اون دو عدد بالا فکر کنم مثالهای خوبی باشن برای این مورد.من میخوام که مقدار ارسال شده رو تغییر ماهیت نده.میشه جواب اینو هم بدید.

ببینید، اینجا چیزی تغییر ماهیت نداده! :لبخندساده: اون عدد موقع استفاده و ارسال و ... همونی هست که باید باشه، تنها موقع چاپ روی صفحه، بدین صورت (عدد علمی) نمایش داده میشه... این هم به دلیل بزرگ بودن این عدد هستش نه چیز دیگه ای!

از طرف دیگه اینکه این متغیر شما به فرمت double ساخته می شود، بحث اش جداست. ببینید شما اگر یک عدد خیلی بزرگ رو بخواهید ذخیره کنید، تنها راهش استفاده از فرمت String هستش چون بقیه فرمت هایی که PHP ساپورت می کنه، دارای بازه کوچکتری هستند. بنابراین وقتی شما چنین عددی رو بدون انتخاب فرمت ذخیره می کنید، بطور خودکار چنین اتفاقی براش میفته. تا جایی هم که میدونم PHP پیشوند های داده ای مثل long و ... رو نداره و بنابراین باید از خیر افزایش بازه ذخیره سازی آن ها گذشت.

موفق باشید :قلب: