我有以下值保存在Postgresql数据库中的numeric(21,3)列:9999999999999423.999应用程序C#端的属性被定义为十进制。但swagger将此值读取为:9999999999999400它可能是由JS限制引起的,或者是什么原因/修复?此外,我还包括swagger的设置:options.SerializerSettings.FloatParseHandling = Newtonsoft.Json.FloatParseHandling. Declaration
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!");
字符串
1条答案
按热度按时间t40tm48m1#
不太可能是Swagger问题。你可能会看到这种行为,因为数字表示为IEEE 754(在C#或JS中为双精度)。检查这个答案,他描述了这种影响在JavaScript中错误地四舍五入的大数字。
当JSON转换为C#时,由于IEEE 754,它的数字太大,因此可能会应用舍入规则。
你可以在C#中尝试,你会感到惊讶:):
字符串