C# 格式化输出

从键盘接收一个字符串,将其转换成一个 double 类型的数据,若转换成功,则显示转换之后的结果(保留小数点之后的 4 位,小数点之前的数字每 3 位加一个逗号);若转换失败,则显示提示信息,并继续接收用户输入,重新转换;

namespace _18
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string str = Console.ReadLine();
            double num = 0.0;
           
            gets(ref str);

            Console.WriteLine("");

            Console.ReadLine();
        }

        private static void gets(ref string str)
        {
            while(true)
            {
                double num = 0.0;
                if (double.TryParse(str, out num))
                {
                    Console.WriteLine("第一种方法");
                    num = Math.Round(num, 4);
                    Console.WriteLine(num);
                    str = num.ToString("N4");
                    Console.WriteLine(str);

                    Console.WriteLine("第二种方法");
                    Console.WriteLine((long)num);
                    string formattedNumber = string.Format("{0:N0}.{1:0000}", (long)num, (num - (long)num) * 10000);
                    Console.WriteLine(formattedNumber);
                    break;
                }
                else
                {
                    Console.WriteLine("不能转换");
                }
            }

            

方法一

这段代码执行了两个步骤,首先使用 `Math.Round` 函数将 `num` 变量四舍五入到小数点后的四位,然后使用 `ToString` 方法将其格式化为一个带有逗号分隔的数字字符串,确保小数点后有四位数字。

让我逐步解释这段代码:

1. `Math.Round(num, 4);`: 这行代码使用 `Math.Round` 函数来将 `num` 变量四舍五入到小数点后的四位。具体而言,`Math.Round` 函数接受两个参数,第一个参数是要进行四舍五入的数字 `num`,第二个参数是小数位数,即要保留的小数位数。在这里,我们将 `num` 四舍五入到小数点后四位,因此它将返回一个新的 `double` 值,将 `num` 四舍五入到小数点后四位。这个值将被分配给 `num` 变量,以覆盖原始值。

2. `str = num.ToString("N4");`: 这一行将四舍五入后的 `num` 变量转换为一个字符串,以确保它包含逗号分隔的千位数字和小数点后的四位小数。具体而言,`num.ToString("N4")` 使用标准的数字格式化字符串 `"N4"`,这告诉 `ToString` 方法将数字格式化为包含逗号分隔符的格式,并保留小数点后的四位数字。这个格式化后的字符串将被分配给 `str` 变量。

这两个步骤一起完成了数字的四舍五入和格式化,确保 `str` 包含了你所期望的格式:千位数字有逗号分隔,小数点后保留四位小数。

方法二

这行代码使用了 `string.Format` 方法来格式化一个数字为满足你的需求的字符串,其中千位数字有逗号分隔,小数点后保留四位。

让我逐步解释这行代码:

1. `double num = 1234567.8912345;`: 首先,我们定义一个双精度浮点数 `num`,其值为 `1234567.8912345`,这将是我们要格式化的数字。

2. `(long)num`: 这部分 `(long)num` 是用来获取 `num` 的整数部分的,即去掉小数部分。通过将 `num` 强制转换为 `long` 类型,小数部分将被截断,只留下整数部分。这样,我们可以将整数部分格式化为千位数字。

3. `"{0:N0}.{1:0000}"`: 这是格式字符串,它指定了如何格式化数字。在这个字符串中,`{0}` 表示第一个参数,即 `(long)num`,而 `{1}` 表示第二个参数,即 `(num - (long)num) * 10000`,即小数部分乘以 10000。

4. `N0` 格式说明符: `{0:N0}` 指示将第一个参数 `(long)num` 格式化为包含千位分隔符的整数,`0` 表示不保留小数。

5. `.`: 这是一个普通的句点,用来分隔整数部分和小数部分。

6. `{1:0000}` 格式说明符: `{1:0000}` 指示将第二个参数 `(num - (long)num) * 10000` 格式化为一个小数,保留四位小数,并用前导零填充,确保小数部分始终包含四位数字。

所以,当 `string.Format` 方法执行时,它将根据格式字符串将整数部分 `(long)num` 格式化为带有逗号分隔的整数部分,然后加上小数部分,确保小数点后有四位小数。最后,将结果分配给 `formattedNumber` 变量,它将包含你所期望的格式化后的字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值