c# - 为什么 1 000 000 不等于 1000000.toString ("N", new CultureInfo ("fr-FR"))

标签 c# unit-testing formatting tostring cultureinfo

我围绕字符串转换和货币编写了一些单元测试。

我正在测试字符串是否以我期望的格式返回,给定 CultureInfo 方法已通过。

 public string GetOverspendAmount(double _amount, CultureInfo cultureInfo)
 {
    return amount.ToString("N", cultureInfo);
 }

我正在使用以下调用对这段代码进行单元测试 -

double amount = 1000000;
CultureInfo ci = new CultureInfo("fr-FR", false);

GetOverspendAmount(amount, ci).Should().Be("1 000 000");

但是测试失败了。预期和实际看起来相同,但当放入 ascii 转换器时,显示以下结果

Expected - 1 000 000
49 32 48 48 48 32 48 48 48

Actual - 1 000 000
049 194 160 048 048 048 194 160 048 048 048

它们不是普通空间,但我想知道它们是什么,为什么它们不只是普通空间?

最佳答案

该空格是不间断空格 (UTF-8 194 160) 而不是常规空格 (UTF-8 32)。

https://utf8-chartable.de/unicode-utf8-table.pl?utf8=dec

不间断空格在 HTML 等格式中有所不同,因为它不允许在它之后自动换行。它还不允许多个空间折叠成一个空间。

关于c# - 为什么 1 000 000 不等于 1000000.toString ("N", new CultureInfo ("fr-FR")),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57807549/

相关文章:

Java 到 C# 格式说明符

python - 在 csv 文件中使用 python 格式化从 twitter api 返回的数据?

c# - 如何在 C# 中指定派生结构的默认状态?

c# - DataGrid 焦点和 SelectedIndex?

unit-testing - 单元测试 Oozie 工作流程

java - 如何模拟参数化构造函数?

java - 使用 Junit 4.4 或更高版本运行 Eclipse Junit 插件测试——为什么没有检测到测试?

c# - 创建泛型列表

c# - ASP.NET SQL Server状态管理——获取appid

html - 如何通过 Google Apps 脚本将简单的 Google 纯文本文档转换为 HTML?