【问题标题】:Rounding Integration in C# [closed]C# 中的舍入集成 [关闭]
【发布时间】:2019-03-07 08:39:39
【问题描述】:

我想编写一个代码,支持我使用小数对值进行四舍五入。 那么,我该如何编写这样的代码呢?

Example 1:

(1) var mainValue = 1.2356 , decimals = 3 ===> 1.236
(2) var mainValue = 1.2356 , decimals = 2 ===> 1.24
(3) var mainValue = 1.2356 , decimals = 1 ===> 1.2

Example 2:
(1) var mainValue = 1.3210 , decimals = 3 ===> 1.321
(2) var mainValue = 1.3210 , decimals = 2 ===> 1.32
(3) var mainValue = 1.3210 , decimals = 1 ===> 1.3

Example 3:
(1) var mainValue = 1.0325 , decimals = 3 ===> 1.033
(2) var mainValue = 1.0325 , decimals = 2 ===> 1.03
(3) var mainValue = 1.0325 , decimals = 1 ===> 1.0

Example 4:
(1) var mainValue = 2.3912 , decimals = 3 ===> 2.391
(2) var mainValue = 2.3912 , decimals = 2 ===> 2.39
(3) var mainValue = 2.3912 , decimals = 1 ===> 2.4

Example 5:
(1) var mainValue = 5.4565 , decimals = 3 ===> 5.457
(2) var mainValue = 5.4565 , decimals = 2 ===> 5.46
(3) var mainValue = 5.4565 , decimals = 1 ===> 5.5

【问题讨论】:

  • 欢迎来到stackoverflow,到底是什么问题?以及使用Math.Round 得到的结果是什么?
  • 请展示您尝试过的方法以及这对您不起作用的原因。否则,这里的高答案可能对您没有帮助。如果我们中的任何人会给您一个您已经尝试过的解决方案怎么办?我怀疑这会对您有所帮助,因此请提供更多有关您遇到问题的信息。
  • 抱歉,您的问题是什么?你开始实现你的舍入方法了吗?它不起作用?然后我们需要查看代码和预期结果以及发生了什么。
  • 我在尝试 Math.Round(5.6,1,MidpointRounding.EvenTo); 而不是 Math.Round(5.6,1,MidpointRounding.AwayFromZero);
  • MidpointRounding.AwayFromZero 是你的朋友。签出this。

标签: c# .net oop .net-core rounding


【解决方案1】:

我预计您在调用Math.Round() 时缺少MidpointRounding.AwayFromZero 参数。没有它,你会得到奇怪的四舍五入结果,因为它会四舍五入到最接近的偶数(所谓的“银行家四舍五入”)。

试试这个代码;它给出了您预期的结果:

using System;

namespace Demo
{
    class Program
    {
        static void Main()
        {
            round(1.2356, 3);
            round(1.2356, 2);
            round(1.2356, 1);

            round(1.3210, 3);
            round(1.3210, 2);
            round(1.3210, 1);

            round(1.0325, 3);
            round(1.0325, 2);
            round(1.0325, 1);

            round(2.3912, 3);
            round(2.3912, 2);
            round(2.3912, 1);

            round(5.4565, 3);
            round(5.4565, 2);
            round(5.4565, 1);
        }

        static void round(double value, int decimals)
        {
            double result = Math.Round(value, decimals, MidpointRounding.AwayFromZero);
            Console.WriteLine($"round({value}, {decimals}) = {result}");
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    相关资源
    最近更新 更多