سؤال

وأنا أحاول أن استخدام عدد صحيح 64BIT ضمني في متغير سلسلة.

وSimplfied أريد أن أفعل شيئا من هذا القبيل:

$i = 76561197961384956;
$s = "i = $i";

والذي ينبغي أن يؤدي إلى s الوجود:

i = 76561197961384956

وهذا لا بالطبع لا تعمل كما يلقي PHP صحيحة كبيرة لتعويم، وبالتالي s هو:

i = 7.65611979614E+16

وعلى الرغم عدة طرق أخرى مثل صب الخ تفشل، وجدت number_format() واستخدامها مثل هذا:

$s = "i = " . number_format($i, 0, '.', '');

ولكن هذه النتائج في s الوجود:

i = 76561197961384960

ويبدو وكأنه مشكلة التقريب، ولكن كيفية إصلاح هذا؟

هل كانت مفيدة؟

المحلول

وأنت تفقد الدقة على الاحالة، وليس على تحويل السلسلة. إذا تم ضمنية قيمة هذا المتغير في الواقع، وأنت لا تستطيع تغيير ذلك، لا يوجد شيء يمكنك القيام به.

وخط مثل:

$i = 76561197961384956;

وسوف تخسر دائما الدقة. إذا كنت بحاجة للحفاظ على كل شيء، واحفظها في سلسلة، لا يمكن تخزينه بوصفها كثافة العمليات من هذا القبيل والحفاظ على جميع الأرقام.

نصائح أخرى

وأعتقد أن الطريقة الوحيدة هي استخدام وظائف bcmath .

<اقتباس فقرة>   

لالرياضيات الدقة التعسفي PHP يقدم حاسبة الثنائية التي تدعم الأرقام من أي حجم ودقة، ممثلة كسلاسل.

وانها $i بك هذا غير صحيح، وليس تحويل سلسلة - PHP يستخدم 32 بت [إينتس] داخليا

.

والآن الطريقة الوحيدة للقيام الرياضيات صحيحا كبيرة في بي هو استخدام bcmath أو برنامج الرصد العالمي ملحقات التي تتعامل مع أعداد كبيرة كسلاسل. ومسوى صحيحة 64BIT في php6.

وذلك عند استخدام أعداد صحيحة كبيرة يلقي بها إلى سلسلة أو ستفقد الدقة على اسناد (الزهر التلقائي لتعويم) ومن ثم استخدامها في المكتبات سلسلة الرياضيات لمعالجة رقمك أبعد من ذلك.

هل حاولت استخدام وظيفة PHP في intval ()؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top