C # تحويل 20 أرقام الدقة المزدوجة إلى سلسلة والعودة مرة أخرى

StackOverflow https://stackoverflow.com/questions/611552

  •  03-07-2019
  •  | 
  •  

سؤال

في C #. لدي ضعف (التي كنت المستخرجة من قاعدة بيانات) الذي يحتوي على 20 أرقام الدقة. في Visual Studio (باستخدام QuickWatch) أستطيع أن أرى قيمة مضاعفة لتكون = ،00034101243963859839.

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

ولقد حاول ما يلي:

double d = 0.00034101243963859839;
string s = d.ToString();
string s2 = d.ToString("F20");
string s3 = d.ToString("0.00000000000000000000"); -- 20 0's
string s4 = (d*100d).ToString();

في هذه الحالات:

s  = 0.000341012439638598
s2 = 0.00034101243963859800
s3 = 0.00034101243963859800
s4 = 0.0341012439638598

وأريد أن أكون قادرة على القيام بما يلي:

double d = 0.00034101243963859839;
string s = d.ToString();
//...
double d2 = double.Parse(s);
if(d == d2)
{
  //-- Success
}

هل هناك أي طريقة للحفاظ على تلك آخر رقمين من الدقة ؟؟

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

المحلول

استخدم في "R" تنسيق رقمي سلسلة :

double d = 0.00034101243963859839;
string s = d.ToString("R");
//...
double d2 = double.Parse(s);
if(d == d2)
{
  //-- Success
}

ووR لتقف على "ذهابا وإيابا". من المستند المرتبط:

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

ويتم اعتماد هذه الصيغة فقط لأنواع مفردة ومزدوجة. يضمن محدد ذهابا وإيابا أن قيمة رقمية تحويلها إلى سلسلة سيتم تحليل مرة أخرى إلى نفس قيمة رقمية.

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

إذا كنت حقا بحاجة دقة إضافية، قد حاول استخدام decimal بدلا من ذلك.

نصائح أخرى

ولا. بالإضافة إلى حقيقة أن يتضاعف هو ثنائي، وبالتالي ليست جيدة لقيم عشرية، الزوجي أن يكون الحد الأقصى من 15/16 الأرقام العشرية (53 بت). عشري وبحد أقصى 28/29 أرقام (96 بت)، لذلك سيكون موافق على استخدامها. إذا كان لديك توضيحات أعلى في قاعدة البيانات، تحتاج إلى الدرجة bignum الخاصة ل C #، والنظر في ستاكوفيرفلوو للتطبيقات.

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