C#中如何只保留小数点后面两位?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中如何只保留小数点后面两位?相关的知识,希望对你有一定的参考价值。

请问在C#中如何将操作结果只保留到小数点后面两位数,谢谢!

C#中如何只保留小数点后面两位方法:

1、num.ToString("#0.00");   //点后面几个0就保留几位

double num=0.121245;string result=num.ToString("#0.00");   //点后面几个0就保留几位
Console.WriteLine(result)。

2、num.ToString("f2");    //fN 保留N位,四舍五入,"F","f" 不区分大小写

double num = 0.123456;string result= num.ToString("f2");    //fN 保留N位,四舍五入
Console.WriteLine(result)。

3、Math.Round(i,2)

i为小数,后面为保留位数。

4、decimal.Round(decimal.Parse(i),2)

i为小数,2为保留位数。

5、直接计算

float i = 32.16667F;

int j = (int)(i * 100);

i= j * 0.01F;//结果32.16。

扩展资料

C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。

C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。

C#是面向对象的编程语言。它使得程序员可以快速地编写各种基于MICROSOFT .NET平台的应用程序,MICROSOFT .NET提供了一系列的工具和服务来最大程度地开发利用计算与通讯领域。

C#使得C++程序员可以高效的开发程序,且因可调用由 C/C++ 编写的本机原生函数,而绝不损失C/C++原有的强大的功能。因为这种继承关系,C#与C/C++具有极大的相似性,熟悉类似语言的开发者可以很快的转向C#。

参考资料:百度百科—C#

参考技术A class Program
static void Main(string[] args)

double num1=0.56789;
string result1=num1.ToString("#0.00"); //点后面几个0就保留几位
Console.WriteLine(result1); double num2 = 0.56789;
string result2 = num2.ToString("f2"); //fN 保留N位,四舍五入
Console.WriteLine(result2);

参考技术B .tostring("f2"). 参考技术C .tostring("F2") 参考技术D tostring("f2")

只保留小数点后两位 C#

【中文标题】只保留小数点后两位 C#【英文标题】:Leave only two places past the decimal point C# 【发布时间】:2020-09-11 01:29:00 【问题描述】:

我的问题和这个类似:

Leave only two decimal places after the dot

但是,这增加了复杂性。数值后缀可以变成任何单位,即

string test = "0.1542 Mol";

string test1 = "0.5247 ml";

基本上,我想要一些可以处理这两种情况的东西:

string test = "0.15 Mol";

string test1 = "0.52 ml";

【问题讨论】:

您应该将 datarepresentation 分开。话虽如此,您希望将 data 舍入到小数点后 2 位。之后,您可以通过附加一些空格、单位或其他内容将其转换为字符串。顺便说一句:您是否知道在您提到的帖子中还包含一个单元,可以将您的问题完全重复? 【参考方案1】:

您需要拆分字符串,然后将值四舍五入。 String.Format ($) 也可以一步完成:

string test = "0.1542 Mol";
string[] testParts = test.Split(' ');
string rounded = $"Convert.ToDecimal(testParts[0]):0.00 testParts[1]";

小提琴:https://dotnetfiddle.net/EQsJGf

【讨论】:

与我的答案相同,只需几行,为什么不一直采用:string rounded = $"Convert.ToDecimal(test.Split(' ')[0]):0.00 test.Split(' ')[1]"; 老实说,当谈到关于 String.Split 的代码效率时,我总是犹豫不决。我知道我们只是在谈论几纳秒和几个字节的内存,但我从来没有真正弄清楚在内部级别(处理器和内存方面)什么更有效。拆分字符串并存储其值,或重复拆分字符串而不使用存储变量。 知道会很有趣:) 看起来,至少对于处理器部分,我存储拆分的方法更有效:dotnetfiddle.net/BMr9Xh 秒表是一个有趣的小工具。【参考方案2】:

更新

您可以使用正则表达式:

var s = "0.153567 Mol";
var num = Regex.Replace(s, @"^([0-9]+\.[0-9]2)([0-9]*)(\s+.+)", "$1$3");
// Output: 0.15 Mol

更新 2

如果你需要对数字进行四舍五入,你仍然可以使用Regex(模式有点改变):

string[] nums =  "0.154567 Mol", "0.158963 ml" ;
foreach (var num in nums)

    var s = Regex.Replace(num, @"^([0-9]+\.[0-9]+)(\s+.+)",
            m => $"Math.Round(decimal.Parse(m.Groups[1].Value), 2)m.Groups[2].Value");
    Console.WriteLine(s);

// Output:
//   0.15 Mol
//   0.16 ml

【讨论】:

@jscarle 不了解地板和圆形。 OP不需要在两位数之后(逗号之后)去除剩余的数字吗? 我并没有说这是错误的,这只是一个观察。我是说使用 Regex 本身是 Math.Floor 的同义词,而使用 String.Format 是 Math.Round 的同义词。 OP没有明确说明他期望的是哪一个。 @bobsyauncle 好吧,仍然可以使用 Regex 对数字进行四舍五入 :) @bobsyauncle 我已经更新了代码 - 您也可以使用正则表达式对数字进行舍入(更新 2)。 ? @jscarle 添加了带舍入的版本(更新 2)。 ?【参考方案3】:

您需要先将您的字符串转换为可以四舍五入的双精度,然后添加原始单位重新格式化为文本:

    string inputText = "0.1542 Mol";
    double inputNumber = Convert.ToDouble(inputText.Split(' ')[0]);
    double outputNumber = Math.Round(inputNumber, 2);
    string outputText = outputNumber + " " + inputText.Split(' ')[1];

【讨论】:

【参考方案4】:
var splittedString = variable.Split(" ");
var number = String.Format("0:0.00", splittedString[0]); 
var result = number + " " + splittedString[1] ;

【讨论】:

【参考方案5】:

我不是 C# 人,但由于没有其他人为您回答过这个问题,鉴于我在其他语言方面的经验,我会尽力提供帮助。我建议以下解决方案:

将字符串视为以空格为分隔符的分隔字符串。 搜索空格的位置,将左侧部分复制到一个变量,将右侧版本复制到另一个变量。 C# 中的 IndexOf() 和 subString() 方法在这里可能很有用。 然后将左侧变量转换为数值,并将其转换回具有适当精度的字符串。把它和右边的字符串结合起来,你就会得到你想要的。

这里是另一个线程的链接,关于如何获得您想要的精度:

Formatting a float to 2 decimal places

【讨论】:

以上是关于C#中如何只保留小数点后面两位?的主要内容,如果未能解决你的问题,请参考以下文章

C#中如何保留小数点后一位

C#中怎么对double型取两位小数。

C#中tostring怎么保留小数点后面3位?

C#怎么保留小数后面2个小数 又怎么四舍五入保留2个小数

c#保留小数点后两位怎么做?

echarts的纵坐标轴的数据小数点后面出现十几位小数,如何设置只显示保留两位小数