【问题标题】:How to round decimal to an int in c# [duplicate]如何在c#中将小数四舍五入为int [重复]
【发布时间】:2013-05-08 02:19:51
【问题描述】:

我正在生成小数,例如:

  1. 0.8235294117647058823529411765

  2. 0.1764705882352941176470588235

我想将它们乘以10,然后将它们四舍五入。如果点后的第二个数字小于5,则设为0。否则,将其设为1。对于上面的例子,那就是:

  1. 8

  2. 2

结果应该放在int中。

【问题讨论】:

  • 所以……Math.Round(n * 10)。参考:Multiplicationrounding
  • 这是一个很好的政策,在你提出问题后,查看“相关”侧边栏----->
  • 在问这些问题之前先谷歌一下怎么样?我不能投反对票,因为我还没有 125 名声望,但一旦我这样做了,我就会投反对票..哈哈!!
  • 确定为重复关闭,但因过于本地化而关闭?你在开玩笑吧?这是一个关于四舍五入的问题。
  • @DanielImms:是的。再乘以 10。非常基本且无用。取整部分显然是重复的,乘法部分只是一般参考。

标签: c#


【解决方案1】:

我认为这很简单。

Math.Round(10 * your_decimal);

参考:http://msdn.microsoft.com/en-us/library/3s2d3xkk.aspx

【讨论】:

    【解决方案2】:

    如果您想将Math.Round() 保留为decimal 或四舍五入到某个精度,可以使用Math.Round()

    decimal dec = 0.8235294117647058823529411765m;
    
    decimal rounded = Math.Round(dec * 10); // 8m
    
    decimal roundedToOne = Math.Round(dec * 10, 1); // 8.2m
    

    仅供参考,explicit conversion 定义为 decimalint,因此您可以通过强制转换为 int 来向下舍入

    int a = (int)(dec * 10); // 8
    

    这可以结合一个条件来向上和向下舍入数字

    decimal num = dec * 10;
    int a = (int)num + (num % 0 < .5m ? 0 : 1); // 8
    

    【讨论】:

    • 那会截断数字,不是吗?
    • 啊,真的,我会解决的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 2021-04-14
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多