截断C#中double值的位数

Fir*_*roz 15 c#

如何在C#中截断double值的前导数字,我已经尝试了Math.Round(doublevalue,2)但没有给出require结果.我没有在Math类中找到任何其他方法.

例如,我的价值为12.123456789,我只需要12.12.

Jon*_*eet 29

编辑:有人指出,这些方法围绕值而不是截断.很难真正截断一个double值,因为它并非真正在正确的基础上......但截断一个decimal值更为可行.

您应该使用适当的格式字符串,例如自定义标准字符串

string x = d.ToString("0.00");
Run Code Online (Sandbox Code Playgroud)

要么

string x = d.ToString("F2");
Run Code Online (Sandbox Code Playgroud)

值得注意的是,double值本身并不"知道"它有多少小数位.只有当你将它转换为字符串时才真正有意义.使用Math.Round将获得最接近的double值x.xx00000(如果您看到我的意思)但x.xx00000由于二进制浮点类型的工作方式,它几乎肯定不会是精确值.

如果您需要除字符串格式之外的任何其他内容,则应考虑使用decimal.价值实际代表什么?

我在.NET中有关于二进制浮点十进制浮点的文章,您可能会发现它们很有用.

  • @Firoz:to string和back to double无论如何都不会帮助你:如果double不能完全代表"12.34",那么你*将获得额外的小数.很容易存储只有两位小数的double. (3认同)
  • 哇,纯粹是偶然的机会,这是Jon Skeet在最后一小时内第二次接受的答案,这完全让我失望.这一轮,OP要求截断!所以3.55555555变成了3.56.我甚至对这个愚蠢的答案进行了投票,现在我无法收回它!这个网站开始变得很糟糕 - 人们只是因为他们现有的声誉而得到投票(比如"哦,这是Jon Skeet,所以一定是对的!"). (3认同)
  • @Jon:别担心,根据upvote计数,你不是唯一没有做功课的人.;) (2认同)

Luk*_*keH 21

你有什么尝试?它对我有效:

double original = 12.123456789;

double truncated = Math.Truncate(original * 100) / 100;

Console.WriteLine(truncated);    // displays 12.12
Run Code Online (Sandbox Code Playgroud)