如何正确显示小数

时间:2019-03-12 13:37:42

标签: c# swagger

我们使用swagger测试其余的API。我有一个返回以下值的json对象:

...
   "MyValue" : 243400.000000
}

但是,当它通过招摇显示时,它显示为:

...
   "MyValue" : 243400
}

在我的控制器中,我在return语句上放置了一个断点,并且可以在 dResult 中验证“ MyValue”是否为243400.000000,但是大胆的显示不能反映这一点。控制器代码如下:

 ...
 var dresult = JSON.JsonConvert.DeserializeObject(result, new JSON.JsonSerializerSettings
        {
            FloatParseHandling = JSON.FloatParseHandling.Decimal
        });

 return Request.CreateResponse(HttpStatusCode.OK, dresult, JsonMediaTypeFormatter.DefaultMediaType);

这可能是一个大刀阔斧的配置问题吗?我还没有发现任何指向它的东西。任何帮助将不胜感激。

原始调整设置

 using System.Web.Http;
 using WebActivatorEx;
 using MyService.WebApi;
 using Swashbuckle.Application;
 using Swashbuckle.Swagger;

 [assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")]

 namespace MyService.WebApi
 {
    public class SwaggerConfig
    {
       public static void Register()
       {
          var thisAssembly = typeof(SwaggerConfig).Assembly;

         GlobalConfiguration.Configuration 
            .EnableSwagger(c =>
                {
                    c.SingleApiVersion("v1", "MyService.WebApi");
                    c.IncludeXmlComments(string.Format(@"{0}\bin\MyService.WebApi.XML", System.AppDomain.CurrentDomain.BaseDirectory));                        
                    c.UseFullTypeNameInSchemaIds();
                    c.DescribeAllEnumsAsStrings();
                })
            .EnableSwaggerUi(c =>
                {
                    c.DisableValidator();
                });
       }
   }
}

1 个答案:

答案 0 :(得分:1)

我认为您可能会以错误的方式考虑这个问题!

如果您关心精确的十进制表示形式,那么我将无法在用于测试API的工具中看到确切的十进制表示形式。

但是...

您最终将如何使用发送的JSON?大概是在JavaScript应用程序中使用它,然后将API响应反序列化为JavaScript对象。但是在这种情况下,您的"MyValue": 243400.000000值将反序列化为JavaScript编号。这是问题的根源,因为swagger-ui(这是Swashbuckle.AspNetCore用于其UI的用途)目前仅知道它是一个数字:它显示了将您的API JSON反序列化的内容,并且243400.000000和243400反序列化为相同的值。

这些都是我认为可能是更根本的问题的所有症状。如果您担心绝对精确地匹配某个十进制表示形式(如在this answer中也提到了相关的SO问题),那么JavaScript数字不是保存值的最佳位置。如果您关心绝对正确地表示小数,则应该考虑使用JavaScript的严格十进制支持库,并将API中的这些值作为字符串发送(然后将客户端转换为十进制库提供的十进制对象你用)。 (编辑:或按原样发送值,但实现自定义JSON解串器,将其转换为真正的十进制对象...)

这里有一个与someone else相同的问题的链接。