双重字符串 - 格式化程序错过了?

时间:2010-09-13 10:06:17

标签: c# string double

我必须使用以下规则将double转换为字符串:

  1. 如果小数点位置为-1(或另一个不存在的值,意为“自动”),则应输出所有有效数字的小数部分(应修剪末尾的全部零)。如果double是整数,则其小数部分根本不应输出。例如,digits = -1:1029.0 - > 1,029,1029.123456789 - > 1,029.123456789。

  2. 如果小数点位置等于或大于0,则应使用给定的位数输出数字的小数部分。例如,digits = 2:1029.0 - > 1,029.00,1029.123456789 - > 1,029.12。

  3. 转换应该取决于文化(点或逗号作为小数点,逗号或空格作为组分隔符等)。

  4. 我有一个任务代码:

    var _Culture = CultureInfo.CreateSpecificCulture("en-US");
    object sourceValue = 1029.0;//.123456789;
    
    int digits = -1; // 2;
    
    var formatter = "G";
    if (digits != -1)
    {
        _Culture.NumberFormat.NumberDecimalDigits = digits;
        formatter = "N";
    }
    
    var sourceValueAsFloat = (double)sourceValue;
    var s = sourceValueAsFloat.ToString(formatter, _Culture);
    

    是否有其他格式化程序(不是“N”或“G”),我可以使用吗?或者,也许,我可以用另一种方式使用“N”/“G”?

    此致

2 个答案:

答案 0 :(得分:0)

请参阅herehere了解所有格式字符串说明符.net了解。

答案 1 :(得分:0)

// preferably make allDigits a static field to avoid re-allocating on every call
string allDigits = "#,0." + new string('#', 350);

string output = sourceValue.ToString(
                    digits < 0 ? allDigits : "#,0." + new string('0', digits));

如果你需要明确处理不同的文化:

string output = sourceValue.ToString(
                    digits < 0 ? allDigits : "#,0." + new string('0', digits),
                    culture);