首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >调整小数精度,.net

调整小数精度,.net
EN

Stack Overflow用户
提问于 2009-07-15 17:24:52
回答 6查看 64.3K关注 0票数 69

C#中的这些行

代码语言:javascript
复制
decimal a = 2m;
decimal b = 2.0m;
decimal c = 2.00000000m;
decimal d = 2.000000000000000000000000000m;

Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine(c);
Console.WriteLine(d);

生成以下输出:

代码语言:javascript
复制
2
2.0
2.00000000
2.000000000000000000000000000

所以我可以看到,从文字创建一个十进制变量允许我控制精度。

  • 我可以在不使用文字的情况下调整十进制变量的精度吗?
  • 我如何从a创建b?如何从c创建b?
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-07-15 20:37:03

为了更严格地符合ECMA CLI规范,在.NET 1.1中引入了类似于保留尾随零的功能。

在MSDN上有一些关于这方面的信息,例如here

您可以按如下方式调整精度:

  • Math.Round (或天花板、地板等)以降低精度(c中的b)
  • 乘以1.000...(使用您想要的小数位数)来提高精度-例如,乘以1.0M可以从a.

得到b。

票数 57
EN

Stack Overflow用户

发布于 2009-07-15 17:50:05

票数 8
EN

Stack Overflow用户

发布于 2009-07-15 18:38:05

我发现我可以通过乘以或除以一个花哨的1来“篡改”比例。

代码语言:javascript
复制
decimal a = 2m;
decimal c = 2.00000000m;
decimal PreciseOne = 1.000000000000000000000000000000m;
  //add maximum trailing zeros to a
decimal x = a * PreciseOne;
  //remove all trailing zeros from c
decimal y = c / PreciseOne;

我可以构造一个足够精确的1来根据已知的大小改变比例因子。

代码语言:javascript
复制
decimal scaleFactorBase = 1.0m;
decimal scaleFactor = 1m;
int scaleFactorSize = 3;

for (int i = 0; i < scaleFactorSize; i++)
{
  scaleFactor *= scaleFactorBase;
}

decimal z = a * scaleFactor;
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1132765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档