C# Double转化为String时的保留位数及格式方式
作者:time-flies
这篇文章主要介绍了C# Double转化为String时的保留位数及格式方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
Double转化为String时的保留位数及格式
有时需要将程序中的数据写入到文件中进行保存,这时候就涉及到数据的字符串格式问题。
下面介绍Double转化为String时如何设置保留位数及格式,示例来自官方资料,本文用于日后快速查询。
double[] numbers= {1054.32179, -195489100.8377, 1.0437E21, -1.0573e-05}; string[] specifiers = { "C", "E", "e", "F", "G", "N", "P", "R", "#,000.000", "0.###E-000", "000,000,000,000.00###" }; foreach (double number in numbers) { Console.WriteLine("Formatting of {0}:", number); foreach (string specifier in specifiers) { Console.WriteLine(" {0,-22} {1}", specifier + ":", number.ToString(specifier)); // Add precision specifiers from 0 to 3. if (specifier.Length == 1 & ! specifier.Equals("R")) { for (int precision = 0; precision <= 3; precision++) { string pSpecifier = String.Format("{0}{1}", specifier, precision); Console.WriteLine(" {0,-22} {1}", pSpecifier + ":", number.ToString(pSpecifier)); } Console.WriteLine(); } } Console.WriteLine(); } // The example displays the following output to the console: // Formatting of 1054.32179: // C: $1,054.32 // C0: $1,054 // C1: $1,054.3 // C2: $1,054.32 // C3: $1,054.322 // // E: 1.054322E+003 // E0: 1E+003 // E1: 1.1E+003 // E2: 1.05E+003 // E3: 1.054E+003 // // e: 1.054322e+003 // e0: 1e+003 // e1: 1.1e+003 // e2: 1.05e+003 // e3: 1.054e+003 // // F: 1054.32 // F0: 1054 // F1: 1054.3 // F2: 1054.32 // F3: 1054.322 // // G: 1054.32179 // G0: 1054.32179 // G1: 1E+03 // G2: 1.1E+03 // G3: 1.05E+03 // // N: 1,054.32 // N0: 1,054 // N1: 1,054.3 // N2: 1,054.32 // N3: 1,054.322 // // P: 105,432.18 % // P0: 105,432 % // P1: 105,432.2 % // P2: 105,432.18 % // P3: 105,432.179 % // // R: 1054.32179 // #,000.000: 1,054.322 // 0.###E-000: 1.054E003 // 000,000,000,000.00###: 000,000,001,054.32179 // // Formatting of -195489100.8377: // C: ($195,489,100.84) // C0: ($195,489,101) // C1: ($195,489,100.8) // C2: ($195,489,100.84) // C3: ($195,489,100.838) // // E: -1.954891E+008 // E0: -2E+008 // E1: -2.0E+008 // E2: -1.95E+008 // E3: -1.955E+008 // // e: -1.954891e+008 // e0: -2e+008 // e1: -2.0e+008 // e2: -1.95e+008 // e3: -1.955e+008 // // F: -195489100.84 // F0: -195489101 // F1: -195489100.8 // F2: -195489100.84 // F3: -195489100.838 // // G: -195489100.8377 // G0: -195489100.8377 // G1: -2E+08 // G2: -2E+08 // G3: -1.95E+08 // // N: -195,489,100.84 // N0: -195,489,101 // N1: -195,489,100.8 // N2: -195,489,100.84 // N3: -195,489,100.838 // // P: -19,548,910,083.77 % // P0: -19,548,910,084 % // P1: -19,548,910,083.8 % // P2: -19,548,910,083.77 % // P3: -19,548,910,083.770 % // // R: -195489100.8377 // #,000.000: -195,489,100.838 // 0.###E-000: -1.955E008 // 000,000,000,000.00###: -000,195,489,100.8377 // // Formatting of 1.0437E+21: // C: $1,043,700,000,000,000,000,000.00 // C0: $1,043,700,000,000,000,000,000 // C1: $1,043,700,000,000,000,000,000.0 // C2: $1,043,700,000,000,000,000,000.00 // C3: $1,043,700,000,000,000,000,000.000 // // E: 1.043700E+021 // E0: 1E+021 // E1: 1.0E+021 // E2: 1.04E+021 // E3: 1.044E+021 // // e: 1.043700e+021 // e0: 1e+021 // e1: 1.0e+021 // e2: 1.04e+021 // e3: 1.044e+021 // // F: 1043700000000000000000.00 // F0: 1043700000000000000000 // F1: 1043700000000000000000.0 // F2: 1043700000000000000000.00 // F3: 1043700000000000000000.000 // // G: 1.0437E+21 // G0: 1.0437E+21 // G1: 1E+21 // G2: 1E+21 // G3: 1.04E+21 // // N: 1,043,700,000,000,000,000,000.00 // N0: 1,043,700,000,000,000,000,000 // N1: 1,043,700,000,000,000,000,000.0 // N2: 1,043,700,000,000,000,000,000.00 // N3: 1,043,700,000,000,000,000,000.000 // // P: 104,370,000,000,000,000,000,000.00 % // P0: 104,370,000,000,000,000,000,000 % // P1: 104,370,000,000,000,000,000,000.0 % // P2: 104,370,000,000,000,000,000,000.00 % // P3: 104,370,000,000,000,000,000,000.000 % // // R: 1.0437E+21 // #,000.000: 1,043,700,000,000,000,000,000.000 // 0.###E-000: 1.044E021 // 000,000,000,000.00###: 1,043,700,000,000,000,000,000.00 // // Formatting of -1.0573E-05: // C: $0.00 // C0: $0 // C1: $0.0 // C2: $0.00 // C3: $0.000 // // E: -1.057300E-005 // E0: -1E-005 // E1: -1.1E-005 // E2: -1.06E-005 // E3: -1.057E-005 // // e: -1.057300e-005 // e0: -1e-005 // e1: -1.1e-005 // e2: -1.06e-005 // e3: -1.057e-005 // // F: 0.00 // F0: 0 // F1: 0.0 // F2: 0.00 // F3: 0.000 // // G: -1.0573E-05 // G0: -1.0573E-05 // G1: -1E-05 // G2: -1.1E-05 // G3: -1.06E-05 // // N: 0.00 // N0: 0 // N1: 0.0 // N2: 0.00 // N3: 0.000 // // P: 0.00 % // P0: 0 % // P1: 0.0 % // P2: 0.00 % // P3: -0.001 % // // R: -1.0573E-05 // #,000.000: 000.000 // 0.###E-000: -1.057E-005 // 000,000,000,000.00###: -000,000,000,000.00001
Double类型转String 类型出现精度丢失问题
C#中Double值用ToString()方法获取string
若Double数字位数超过16位就会造成精度缺失
建议用取整和取小数部分再合并的方式获取相对精确的string
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。