开发者

Conversion of long to decimal in c#

开发者 https://www.devze.com 2023-03-02 16:45 出处:网络
I have a value stored in a variable which is of type \"long\". long fileSizeInBytes = FileUploadControl.FileContent.Length;

I have a value stored in a variable which is of type "long".

long fileSizeInBytes = FileUploadControl.FileContent.Length;
Decimal fileSizeInMB = Convert.ToDecimal(fileSizeInBytes / (1024 * 1024));

I want to convert the fileSizeInBytes to decimal number rounded up to 2开发者_高级运维 decimal places (like these: 1.74, 2.45, 3.51) But i'm not able to get the required result. I'm only getting single digit with no decimal places as result. Can some one help me with that ??.

Thanks in anticipation


Decimal fileSizeInMB = Convert.ToDecimal(fileSize) / (1024.0m * 1024.0m);

What you're doing is dividing the filesize by an integer, which results in an integer, not a decimal. Any remainder left over will be chopped off.


I don't see fileSize declared anywhere - but Im going to assume it's a long. So fileSize / (1024 * 1024) is forced up to a long value which doesn't hold any decimal places so you get something like:

Convert.ToDecimal(someLongValue)

Which won't have any decimal places. Convert the division to a double (or some other decimal) first before passing it to Convert.ToDecimal


Maybe a little late but here you have more or less everything you need for filesizes watts etc

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
using System.Runtime.InteropServices;
using System.Threading;

namespace ConsoleApplication1
{ 

    class Program
    {

        /// <summary>
        /// Formats the given size to the order of magniture given
        /// Order is 1 for KB, 2 for MB etc up to 8, after that you get exponents for the same notations
        /// </summary>
        /// <param name="size">The total size in bytes</param>
        /// <param name="order">+1 for each 1024 B,M,... 0 for nothing</param>
        /// <param name="unit">Usually you will want B for bytes denotation, but maybe "bit" or "bi" or W for watt</param>
        /// <param name="decimal_places">Number of desired decimal places</param>
        /// <param name="add_space">Separate KB MB etc from the number with a space?</param>
        /// <returns>Formatted size</returns>
        public static string FormatSize(string unit, double size, int order, int decimal_places, bool add_space) {

            string[] suffixes = new string[] {"", "K","M","G","T","P","E","Z","Y"};

            int exponent = order - 8 > 0 ? order - 8 : 0;
            order -= exponent;

            string suffix = suffixes[order];

            while (order > 0) {
                size /= 1024;
                order--;
            }

            string sDecimals = new String('0', decimal_places);
            string sExponent = exponent != 0 ? "E" + exponent : "";
            string dot = decimal_places > 0 ? "." : "";

            return size.ToString("#,##0" + dot + sDecimals + sExponent) + (add_space ? " " : "") + suffix + unit;
        }

        public static void Main(string[] Args)
        {
            Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;

            string sz;
            sz = FormatSize("B", 1024, 1, 0, false);
            Console.WriteLine(sz);
            sz = FormatSize("B", 1024*1024 + 512, 1, 0, true);
            Console.WriteLine(sz);
            sz = FormatSize("W", 1024 * 1024 + 512, 1, 2, true);
            Console.WriteLine(sz);
            sz = FormatSize("B", 1024 * 1024 + 512, 2, 2, true);
            Console.WriteLine(sz);
            sz = FormatSize("B", 1024 * 1024 * 1024 + 1024 * 1024 * 1024 / 2, 3, 0, false);
            Console.WriteLine(sz);
            sz = FormatSize("bit", 1024 * 1024 * 1024 + 1024 * 1024 * 1024 / 2, 3, 1, false);
            Console.WriteLine(sz);
            sz = FormatSize("B", 1024 * 1024 * 1024 + 1024 * 1024 * 1024 / 2 - 1, 3, 2, false);
            Console.WriteLine(sz);
            sz = FormatSize("Ω", 1024 * 1024 * 1024 + 1024 * 1024 * 1024 / 2 - 1, 3, 1, false);
            Console.WriteLine(sz);
            sz = FormatSize("B", 1024 * 1024 * 1024 + 1024 * 1024 * 1024 / 2 - 10000000, 3, 2, false);
            Console.WriteLine(sz);
            sz = FormatSize("B", 1024 * 1024 * 1024 + 1024 * 1024 * 1024 / 2 - 1, 3, 0, false);
            Console.WriteLine(sz);
            sz = FormatSize("bit", 1208925819614629174706176f, 9, 2, true);
            Console.WriteLine(sz);
        }
    }
}

Here is some output:

1KB
1,025 KB
1,024.50 KW
1.00 MB
2GB
1.5Gbit
1.50GB
1.5GΩ
1.49GB
1GB
1.00E1 Ybit


here is a function i use to display file size

//---------------------------------------------------------------------------------------------------------------------------------
        /// <summary>
        /// Formats from bytes to KB,MB,GB,TB 
        /// </summary>
        /// <param name="number">Bytes to format</param>
        /// <returns></returns>
        public static string AutoFileSize(long number)
        {
            double tmp = number;
            string suffix = " B ";
            if (tmp > 1024) { tmp = tmp / 1024; suffix = " KB"; }
            if (tmp > 1024) { tmp = tmp / 1024; suffix = " MB"; }
            if (tmp > 1024) { tmp = tmp / 1024; suffix = " GB"; }
            if (tmp > 1024) { tmp = tmp / 1024; suffix = " TB"; }
            return tmp.ToString("n") + suffix;
        }
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号