.NET Core接口返回float字段到前端精度失真问题处理

67 阅读1分钟

.NET Core接口返回float字段,后端监测到的值为0.1,但是前端获取到数据显示为0.100000001,这是因为flaot精度问题,怎么解决呢?

    public class SingleConverter : JsonConverter<Single>
    {
        public override Single Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
        {
            if (reader.TokenType == JsonTokenType.String)
            {
                if (Single.TryParse(reader.GetString(), out Single value)) { return value; }
            }
            return reader.GetSingle();
        }

        public override void Write(Utf8JsonWriter writer, float value, JsonSerializerOptions options)
        {
            writer.WriteStringValue(value.ToString());
        }
    }

Startup中注册

        public void ConfigureServices(IServiceCollection services)
        {
                    services.AddControllers(options =>
            {
                options.EnableEndpointRouting = false;
                options.RespectBrowserAcceptHeader = true; // false by default
                options.Conventions.Add(new RouteTokenTransformerConvention(new SlugifyParameterTransformer()));
            }).ConfigureApiBehaviorOptions(options => { })
            .AddControllersAsServices()
            .AddJsonOptions(options =>
            {
                options.JsonSerializerOptions.Converters.Add(new SingleConverter());
            })
        }