在最后一个字符前插入一个点

时间:2013-01-15 12:55:06

标签: c# string-formatting

是否可以使用string.Format从int a = 456;获取类似“45.6”的字符串?

5 个答案:

答案 0 :(得分:3)

数学运算可能会在不同的文化中产生不同的结果。您可能会获得,而不是.。试试这个

var aStr = a.ToString();
var res = aStr.Insert(aStr.Length - 1, ".")

答案 1 :(得分:2)

除以10(加倍)。

您还需要考虑当前的文化。要始终获得一个点,请使用InvariantCulture

为避免浮点不精确问题(例如45 - > 4.49999999),请确保仅通过指定“0.0”格式打印第一个数字。

int i = 123;
var s = String.Format (CultureInfo.InvariantCulture, "{0:0.0}", i / 10.0);

答案 2 :(得分:0)

您可以使用IFormatProvider实现。 (可以自定义为任何格式)

int val = 456;  
string s = string.Format(new CustomerFormatter(),"{0:1d}", val);
string s1 = string.Format(new CustomerFormatter(), "{0:2d}", val);
Console.WriteLine(s); //45.6
Console.WriteLine(s1); //4.56

 public class CustomerFormatter : IFormatProvider, ICustomFormatter
{
    public object GetFormat(Type formatType)
    {
        if (formatType == typeof(ICustomFormatter))
            return this;
        else
            return null;
    }

    public string Format(string format, object arg, IFormatProvider formatProvider)
    {
        if (!this.Equals(formatProvider))
        {
            return null;
        }
        else
        {
            string customerString = arg.ToString();
             switch (format)
            {
                case "1d":
                    return customerString.Insert(customerString.Length - 1, ".");
                case "2d":
                    return customerString.Insert(customerString.Length - 2, ".");

                default:
                    return customerString;
            }
        }
    }
}

答案 3 :(得分:0)

        int a = 456;
        String aString = String.Format("{0}{1}{2}", a / 10, ".", a % 10);

答案 4 :(得分:0)

Int32 a = 456;

String aString = a.ToString();
aString = aString.Insert((aString.Length - 1), ".")