c#动态保留小数位数的数值格式化方法实例----从小数点后非零数字保留两位进行四舍五入

news2024/10/6 12:33:37

c#动态保留小数位数的数值格式化方法实例----从小数点后非零数字保留两位进行四舍五入

  • 功能介绍
    • 代码案例
    • 输出结果
    • 封装扩展方法
      • 控制台调用
    • 其他方法地址

功能介绍

1. 输入的数字是整数,则直接返回整数部分的字符串表示。

2. 如果输入的数字是小数,则执行以下步骤:

    2.1 如果小数部分.后以".0"开头(例如:0.00013),需要动态计算显示,不允许固定保留小数位数。这意味着不能直接保留两位小数,因为无法确定后面有多少位0。直接保留会显示为0或者0.00

    2.2 如果小数部分不以".0"开头,直接进行四舍五入并保留小数位数。

该方法的目的是根据输入的数字进行判断和处理,使得最终输出的字符串满足上述保留小数的规则。

代码案例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine($"原始值:567--------转换后的值:{FormatNumber(567)}");
            Console.WriteLine($"原始值:0.00000196--------转换后的值:{FormatNumber(0.00000196)}");
            Console.WriteLine($"原始值:831.00002455--------转换后的值:{FormatNumber(831.00002455)}");
            Console.WriteLine($"原始值:76.008921--------转换后的值:{FormatNumber(76.008921)}");
            Console.WriteLine($"原始值:0.003333333--------转换后的值:{FormatNumber(0.003333333)}");
            Console.WriteLine($"原始值:0.54241218115613401401552902563902978171--------转换后的值:{FormatNumber(0.54241218115613401401552902563902978171)}");

        }


        /// <summary>
        /// 计算保留小数
        /// 1、整数:如果是整数则直接返回
        /// 2、小数:
        ///     2.1小数点后以.0开头,需要动态计算显示,假如0.00013,直接保留两位岂不是0.00了,又不确定后面有多少位0,不允许固定保留小数位
        ///     2.2小数点后不为.0开头,直接四舍五入保存
        /// 0.00001显示为0.00001
        /// 0.00000196显示为0.000002
        /// 76.008921显示为76.0089
        /// 831.00002455显示为831.000025
        /// 0.003333333显示为0.0033
        /// 0.54241218115613401401552902563902978171显示为0.54
        /// 567显示为567
        /// </summary>
        /// <param name="number"></param>
        /// <returns></returns>
        static string FormatNumber(double number)
        {
            try
            {
                // 判断是否整数,如果是,直接返回整数部分
                if (number == Math.Floor(number))
                {
                    return number.ToString("0");
                }
                else
                {
                    // 获取小数部分
                    double decimalPart = number - Math.Floor(number);
                    // 转换小数部分为字符串
                    string decimalPartString = decimalPart.ToString("0.##############################");
                    // 找到小数点的位置
                    int dotIndex = decimalPartString.IndexOf('.');

                    // 计算小数部分的 ".0" 开头的零的数量
                    int zeroCount = 0;
                    for (int i = dotIndex + 1; i < decimalPartString.Length; i++)
                    {
                        if (decimalPartString[i] == '0')
                        {
                            zeroCount++;
                        }
                        else
                        {
                            break;
                        }
                    }

                    // 生成保留小数位数的格式字符串
                    string formatString;
                    if (zeroCount == 0)
                    {
                        formatString = "0.00"; // 如果没有 ".0" 开头的零,保留两位小数
                    }
                    else
                    {
                        formatString = "0." + new string('#', 2 + zeroCount); // 否则,根据零的数量生成格式字符串
                    }

                    return number.ToString(formatString);
                }
            }
            catch (Exception ex)
            {
                return number.ToString("0.##");
            }
        }


    }
}

输出结果

在这里插入图片描述

封装扩展方法


public static class FormatExtension
{
    public static string FormatNumber(this double number)
    {
        try
        {
            // 判断是否整数,如果是,直接返回整数部分
            if (number == Math.Floor(number))
            {
                return number.ToString("0");
            }
            else
            {
                // 获取小数部分
                double decimalPart = number - Math.Floor(number);
                // 转换小数部分为字符串
                string decimalPartString = decimalPart.ToString("0.##############################");
                // 找到小数点的位置
                int dotIndex = decimalPartString.IndexOf('.');

                // 计算小数部分的 ".0" 开头的零的数量
                int zeroCount = 0;
                for (int i = dotIndex + 1; i < decimalPartString.Length; i++)
                {
                    if (decimalPartString[i] == '0')
                    {
                        zeroCount++;
                    }
                    else
                    {
                        break;
                    }
                }

                // 生成保留小数位数的格式字符串
                string formatString;
                if (zeroCount == 0)
                {
                    formatString = "0.00"; // 如果没有 ".0" 开头的零,保留两位小数
                }
                else
                {
                    formatString = "0." + new string('#', 2 + zeroCount); // 否则,根据零的数量生成格式字符串
                }

                return number.ToString(formatString);
            }
        }
        catch (Exception ex)
        {
            return number.ToString("0.##");
        }
    }

}

控制台调用

     double num = 2567.11233;
     Console.WriteLine(num.FormatNumber());

其他方法地址

.NET(C#)将十进制数四舍五入保留第一个非零小数(Math.Round())

如果有哪位前辈或同胞了解类似以上转换合适的方法、以及依赖包,可以说明下,一起学习进步,本次遇到记录一下~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1005190.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

百家宴焕新上市,持续深耕100-300元价位段

执笔 | 尼 奥 编辑 | 古利特 4月8日&#xff0c;长江酒道曾在《百家宴谋划“晋级”之路&#xff0c;多措并举切分宴席市场“蛋糕”》一文中提到&#xff1a;“百家宴主力新品即将登场&#xff0c;市场政策灵活焕新。” 如今&#xff0c;百家宴新品及市场新政&#xff0c;正…

计算机二级公共基础知识-2023

计算机基础知识&#xff1a; 计算机的发展&#xff1a; 第一台电子计算机eniac 埃尼阿克 1946 第一台存储程序计算机 edvac 艾迪瓦克 根据电子元器件的发展分类 1.电子管 2.晶体管 3.集成电路 4.超大规模继承电路 按照电脑的用途可以分为 专用计算机 专门用于处理…

vcomp100.dll丢失怎样修复?5个靠谱的修复方法分享

VCOMP100.DLL 是由微软打造的动态链接库&#xff0c;它对于一些图形密集型应用&#xff0c;例如Photoshop&#xff0c;以及多款知名游戏如巫师3的运行至关重要。 如果操作系统在启动应用程序时无法找到此vcomp100.dll&#xff0c;则会出现vcomp100.dll丢失或未找到错误。 如果D…

Google 基于 GNN 开发气味识别 AI,工作量相当于人类评价员连续工作 70 年

内容一览&#xff1a;气味总是萦绕我们身边。然而&#xff0c;我们却很难对气味准确描述。最近&#xff0c;Google Research 的子公司 Osom 基于图神经网络&#xff0c;开发了气味分析 AI。它可以根据化学分子的结构&#xff0c;对分子的气味进行预测。基于这一 AI&#xff0c;…

2023年法国CAC40指数研究报告

第一章 指数概况 1.1 指数基本情况 CAC 40指数&#xff0c;全名 Cotation Assiste en Continu (意为“连续辅助报价”)&#xff0c;是法国巴黎股票交易所的标志性股票指数&#xff0c;与德国DAX指数及英国富时100指数并列为欧洲三大指数。自1987年12月31日成立以来&#xff0…

【Linux学习笔记】基础命令1

1. 什么是操作系统2. Linux基本指令2.1. ls指令2.2. pwd命令2.3. cd命令2.4. touch命令2.5. mkdir命令 1. 什么是操作系统 这里简单的讲述一下操作系统的概念&#xff0c;来看下图示&#xff1a; **操作系统是计算机系统中的一种软件&#xff0c;它负责管理计算机硬件资源和提…

CentOS 安装HTTP代理服务器 Tinyproxy

Tinyproxy是一个小型的基于GPL的HTTP/SSL代理程序&#xff0c;非常适合小型网络而且便于快速部署。这个代理程序最大的优点就是占用系统资源比较少。这里使用的系统为CentOS7.6&#xff0c;可以直接 yum 方式安装。 yum install tinyproxy -y 如果提示找不到安装包&#xff0…

中国各省市相关图标

中国各省市相关图标

buuctf crypto 【[GUET-CTF2019]BabyRSA】解题记录

1.打开文件 2.给出了pq以及&#xff08;p1&#xff09;*(q1),e&#xff0c;d&#xff0c;c&#xff0c;就可以得出结果了 import gmpy2 from Crypto.Util.number import long_to_bytes #pq用x表示 #(p1)(q1)用y表示 x 0x1232fecb92adead91613e7d9ae5e36fe6bb765317d6ed3…

Python爬虫基础(二):使用xpath与jsonpath解析爬取的数据

文章目录 系列文章索引一、使用xpath解析html文件1、浏览器安装xpath-healper&#xff08;1&#xff09;谷歌浏览器安装&#xff08;需要科学上网&#xff09;&#xff08;2&#xff09;验证&#xff08;3&#xff09;使用文件安装&#xff08;不需科学上网&#xff09; 2、安装…

2023年基因编辑行业研究报告

第一章 行业发展概况 1.1 定义 基因编辑&#xff08;Gene Editing&#xff09;&#xff0c;又称基因组编辑&#xff08;Genome Editing&#xff09;或基因组工程&#xff08;Genome Engineering&#xff09;&#xff0c;是一项精确的科学技术&#xff0c;可以对含有遗传信息的…

NotePad——xml格式化插件xml tools在线安装+离线安装

在使用NotePad时&#xff0c;在某些情形下&#xff0c;需要格式化Xml格式内容&#xff0c;可以使用Xml Tools插件。 一、在线安装 1. 打开Notepad 软件 2. 选择插件&#xff0c;选择“插件管理” 3. 搜索 XML Tools&#xff0c;找到该插件后&#xff0c;勾选该文件&#xff…

基于视觉重定位的室内AR导航APP的大创项目思路(3)手机相机内参数据获取和相机标定

文章目录 相机内参为什么要获取相机的内参数据&#xff1a;获取相机内存数据的方法棋盘格标定自动相机标定 前情提要&#xff1a; 是第一次做项目的小白&#xff0c;文章内的资料介绍如有错误&#xff0c;请多包含&#xff01; 相机内参 相机内参是本身的物理数据&#xff0c…

wireshark通常无法抓取交换机所有端口报文

Wireshark 是一种网络分析工具&#xff0c;它通常在计算机的网络接口上进行数据包捕获和分析。然而&#xff0c;Wireshark 默认情况下无法直接捕获交换机所有端口的报文。 交换机是一种网络设备&#xff0c;它在局域网内转发数据包&#xff0c;根据目的MAC地址将数据包仅发送到…

Minecraft--基于云服务器搭建自己的服务器--简易搭建

阿丹&#xff1a; 上一个项目结束了。但是看着自己的服务器想着能不能做点啥子吧。想到了之前和兄弟们玩的麦块。好久没和兄弟们一起玩耍了。怀念之前一起连一个wifi玩我的世界的时候是真快乐。于是尝试自己动手搭建一个我的世界服务器&#xff0c;邀请兄弟们重温一下快乐。 提…

[libc-2.31 off_by_null] N0wayBack ezheap练习

以前保留了个WP&#xff0c;但是没复现过也没法用&#xff0c;用了两个晚上慢慢理复现一下。 先看这个题 while ( 1 ){menu();__isoc99_scanf("%d", &v3);switch ( v3 ){case 1:m1add(); //带readbreak;case 2:m2free();break;case 3:m3edit(); //溢出br…

Vscode配置已有工程及自动格式化

这里写目录标题 前言配置CMake配置clang&clang-tidy&clang-format.clangd.clang-tidy.clang-format 前言 最近一直在用vscode写代码&#xff0c;发现vscode一旦配置好了真的好用&#xff0c;不论是语法提示&#xff0c;还是跳转&#xff0c;或者是format&#xff0c;都…

回归与聚类算法系列⑤:逻辑回归

目录 1、介绍 2、原理 输入 激活函数 3、损失及其优化 损失函数 优化 4、API 5、案例&#xff1a;乳腺癌肿瘤预测 数据集 代码 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0…

CUDA和cudnn详细安装过程【通用win】

1 软硬件资源 仅作参考&#xff0c;其他型号通用 win 11 32内存显卡 RTX 2080Ti &#xff0c;驱动版本号&#xff1a;516.59python 3.8.10torch 1.8.0 框架cudatoolkit 11.1cudnn 8.0.4 2 查看适用cuda版本 2.1 查看本机的cuda算力 安装之前先进入官网查看自己的显卡能不能用…

关于OxyPlot.Wpf包没有Plot控件问题

一、OxyPlot.Wpf 控件信息 GitHub&#xff1a;https://github.com/oxyplot/oxyplot 官方文档地址&#xff1a;https://oxyplot.readthedocs.io/en/latest/index.html 在网上查了好久T^T 最后安装了2.0.0版本就出现了