Swagger UI错误地舍入大的十进制值C#

juud5qan  于 5个月前  发布在  C#
关注(0)|答案(1)|浏览(76)

我有以下值保存在Postgresql数据库中的numeric(21,3)列:9999999999999423.999应用程序C#端的属性被定义为十进制。
但swagger将此值读取为:9999999999999400
它可能是由JS限制引起的,或者是什么原因/修复?
此外,我还包括swagger的设置:options.SerializerSettings.FloatParseHandling = Newtonsoft.Json.FloatParseHandling. Declaration

t40tm48m

t40tm48m1#

不太可能是Swagger问题。你可能会看到这种行为,因为数字表示为IEEE 754(在C#或JS中为双精度)。检查这个答案,他描述了这种影响在JavaScript中错误地四舍五入的大数字。
当JSON转换为C#时,由于IEEE 754,它的数字太大,因此可能会应用舍入规则。
你可以在C#中尝试,你会感到惊讶:):

double a = 999999999999999423.999;
double b = 999999999999999400;
if (a == b) Console.WriteLine("Surprise!");

字符串

相关问题