C # تحويل 20 أرقام الدقة المزدوجة إلى سلسلة والعودة مرة أخرى
سؤال
في 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 #، والنظر في ستاكوفيرفلوو للتطبيقات.