剑道条件格式导致负零
Posted
技术标签:
【中文标题】剑道条件格式导致负零【英文标题】:Kendo conditional formatting results in negative zero 【发布时间】:2017-02-20 00:25:21 【问题描述】:我们正在使用 kendo 对条件格式的支持来构建自定义掩码。例如:
kendo.toString(value, '\\$0;-\\$0') // e. g. -$100 or $100
问题在于 kendo 在应用舍入之前选择要使用条件格式的哪一侧。因此,我们最终可以显示负零:
kendo.toString(-.01, '\\$0;-\\$0') // -$0
请注意,这与此问题类似:http://www.telerik.com/forums/issue-rounding-to-zero---getting-negative-zero,但是该问题是针对内置 n2 格式的,而我们的问题是针对条件格式的。
请注意,在 C#/.NET 中,条件格式的行为符合我们的要求:
Console.WriteLine((-.01).ToString("$0;-$0")); // $0
作为参考,我们构建这样的掩码的原因是因为我们有用户定义的“前”和“后”符号,它们应该位于负号/正号之间(如果我们使用括号表示否定,则为括号)和号码本身。因此,我们需要 -$100 或 ($100) 而不是 $-100 或 $(100),其中“$”是用户指定的字符串。
是否有可能让 Kendo 在这方面表现得像 .NET?这是预期的行为还是 Kendo 中的错误?
编辑:看起来这也可能导致使用 3 路条件格式的“正零”问题:
var format = "+\\$0;-\\$0;\\$0";
kendo.toString(1, format) // "+$1"
kendo.toString(0, format) // "$0"
kendo.toString(-1, format) // "-$1"
kendo.toString(.001, format) // "+$0" (positive zero)
这在 .NET 中也可以正常工作:
Console.WriteLine(0.001.ToString("+\\$0;-\\$0;\\$0")); // $0
【问题讨论】:
【参考方案1】:也许这是一种预期的行为。但是,您可以在应用格式之前通过舍入来避免这种情况。
kendo.toString(Math.round(-.01), "\\$0;-\\$0") //$0
【讨论】:
以上是关于剑道条件格式导致负零的主要内容,如果未能解决你的问题,请参考以下文章