我有一个报告record
,其中TaxPercentage
为string
属性。
public record SaleReportDto
{
public string TaxPercentage { get; set; } = string.Empty;
}
我使用C# Percentage Format Specifier
设置税收百分比。
var report = new SaleReportDto()
{
TaxPercentage = $"{0.18:P2}")
};
我是asserting
上面的值在我的测试如下,
report.TaxPercentage.Should().Be($"{0.18:P2});
测试在我的windows
机器上通过。当我在我的GitHub Actions
上运行相同的测试时,我得到了不同的结果,测试assertion
失败,并显示以下错误消息,
预期报表。TaxPercentage应为“18.00%”,长度为7,但“18.00%”的长度为6,在“%”附近不同(索引5)
为了暂时通过测试,我对assertion
进行了如下更改
report.TaxPercentage.Contains("18");
为什么同一台机器中的assignment
和assertion
的值不同?我使用$"{0.18:P2}"
到assign
和assert
。那么这应该在两种情况下生成相同的值。但事实并非如此。
有没有提示为什么会发生这种情况?我最初认为这可能是因为Culture
,但是在assigning
和asserting
中我没有使用任何特定的Culture
。所以这两个地方应该返回相同的值。但是不确定为什么在GitHub Actions
中不这样做。
1条答案
按热度按时间nfs0ujit1#
我没有使用任何特定的文化。所以这两个地方应该返回相同的值。
这是不正确的。字符串插值默认使用"当前"区域性进行格式化,这取决于您运行程序的环境。因此,在不同的计算机上,它完全可能返回不同的结果。例如,在我的计算机上,您的字符串返回第三个变量:
18,00 %
.如果您希望在所有可以运行此代码的计算机上获得相同的结果,请使用如下所示的任一固定区域性:
或者,如果这不是您想要的,则确定要使用哪种区域性来获得所需结果,然后显式使用它来进行格式设置,而不必依赖于它是否为当前区域性。