简体   繁体   中英

how to show number of digits on users's request?

for example: if a string value is "123456.7890" . if user enters the length 6 and the other value 2 for the decimal place. the output value should be like "123456.78"

if user enters the length 5 and the other value 3 for the decimal place. the output value should be like "12345.789" string s = "123456.7890";

 string a = string.Format("{0, 2:F2}", s);
 int index = a.IndexOf('.');
 a = a.Substring(index, (a.Length-index));

The most crude and direct way would be:

            var length = 5;
            var decimalPlaces = 2;
            var s = "123456.7890";
            var data = s.Split('.');
            var output1 = data[0].Substring(0, length);
            var output2 = data[1].Substring(0, decimalPlaces);
            var result = output1 + "." + output2;

One approach could be like this:

NOTE: If the string's length is less than the number of characters you're taking, code will throw an exception ArgumentOutOfRangeException

int LeftPlaces = 4;
int RightPlaces = 2;
String Input = "123456.7890";
String[] Splitted = Input.Split('.');
String StrLeft = Splitted[0].Substring(0, LeftPlaces);
String StrRight = Splitted[1].Substring(0, RightPlaces);
Console.WriteLine(StrLeft + "." + StrRight);

Output: 1234.78

If you want to do this without strings, you can do so.

public decimal TrimmedValue(decimal value,int iLength,int dLength)
{
    var powers = Enumerable.Range(0,10).Select(x=> (decimal)(Math.Pow(10,x))).ToArray();
    int iPart = (int)value;
    decimal dPart = value - iPart;

    var dActualLength = BitConverter.GetBytes(decimal.GetBits(value)[3])[2];
    var iActualLength = (int)Math.Floor(Math.Log10(iPart) + 1);

    if(dLength > dActualLength || iLength > iActualLength)
        throw new ArgumentOutOfRangeException();
    dPart = Math.Truncate(dPart*powers[dLength]);
    iPart = (int)(iPart/powers[iActualLength - iLength]);
    return iPart + (dPart/powers[dLength]);
}

Client Call

Console.WriteLine($"Number:123456.7890,iLength=5,dLength=3,Value = {TrimmedValue(123456.7890m,5,3)}");
Console.WriteLine($"Number:123456.7890,iLength=6,dLength=2,Value = {TrimmedValue(123456.7890m,6,2)}");
Console.WriteLine($"Number:123456.7890,iLength=2,dLength=4,Value = {TrimmedValue(123456.7890m,2,4)}");
Console.WriteLine($"Number:123456.7890,iLength=7,dLength=3,Value = {TrimmedValue(123456.7890m,7,3)}");

Output

Number:123456.7890,iLength=5,dLength=3,Value = 12345.789
Number:123456.7890,iLength=6,dLength=2,Value = 123456.78
Number:123456.7890,iLength=2,dLength=4,Value = 12.789

Last call would raise "ArgumentOutOfRangeException" Exception as the length is more than the actual value

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM