【问题标题】:Limiting float to 4 decimal places将浮点数限制为小数点后 4 位
【发布时间】:2015-03-12 21:03:30
【问题描述】:

这就是我想要实现的目标:

如果浮点数超过 4 位小数,只保留到前 4 位小数(不要四舍五入。)

例如:111.3547698 -> 111.3547

如果浮点数少于 4 位小数,则保持不变

我遇到了这个命令:

float example = 111.3547698;

((Math.Truncate(Example * 1000)) / 1000)

但我不想四舍五入。根据上面发布的命令,111.3547698 -> 111.354

但我需要它留下来:111.3547

【问题讨论】:

  • 你需要另一个 0。
  • 你是打算对结果做更多​​的数学运算,还是只是把它写在某个地方?如果是后者,还有更好的方法。
  • 不,我不会再做任何数学运算,只是想截断到小数点后 4 位并将其显示为结果。
  • 我尝试添加另一个 0,但仍然是相同的答案,并且它是四舍五入到 3 位数。
  • 问题在于您如何显示它,显示该代码。

标签: c#


【解决方案1】:

强制进行这种截断的一种方法是减去少量,以便 Math.Round 按需要工作。

Math.Round(111.3547698 - 0.00005, 4)

等价于

Math.Round(111.3547198, 4)

它确实为您提供了您正在寻找的 111.3547。

一般情况是

Math.Round(num - 0.5/(Math.Pow(10, digits)), digits)

其中数字 > 0

有关类似问题/答案,请参阅 https://codereview.stackexchange.com/questions/51951/truncate-decimal-places

【讨论】:

  • 这仅适用于这种情况,但值有什么不同,这只是硬编码值的示例,但如果我想截断不同的值,我该怎么做?
  • 在上面的解决方案中添加了一个通用案例
【解决方案2】:

您的代码甚至无法在 C# 的最后一个版本中编译。

上面写着:

double类型的文字不能隐式转换为'float'类型; 使用“F”后缀来创建这种类型的文字

这意味着你应该阅读 C# 中的 literals

您可能从here 复制的这段代码有文字m,告诉编译器这个数字将是decimal。如果您想使用 float 以相同的代码和平和截断 4 位数字,您应该使用 f 文字并这样写:

float ex = 111.3547698f;
var ex4 = (Math.Truncate(ex * 10000f)) / 10000f;

【讨论】:

  • 我试过 10000f)) / 10000f,四舍五入到三位数,输出为 111.355
  • = ((Math.Truncate(XXXXXX.VALUE * 10000f)) / 10000f) -- 111.3547698(实际值)----- 111.355(返回值)
  • XXXValue = ((Math.Truncate(xxxValueObj.VALUE * 10000f)) / 10000f)。当我试图将这个 XXXValue 作为输出给出的值截断到小数点后 4 位时
猜你喜欢
  • 2021-04-23
  • 2023-01-08
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 2011-03-10
  • 2018-03-04
  • 2022-01-11
  • 2014-10-03
相关资源
最近更新 更多