Powershell 数字格式

Cle*_*ent 6 powershell

我正在创建一个脚本,将 csv 文件转换为另一种格式。为此,我需要我的数字具有固定格式以尊重列大小:00000000000000000,00(20个字符,逗号后2位数字)

我尝试使用-f和 方法格式化数字$value.toString("#################.##")但没有成功

这是一个输入示例:

4000000
45817,43
400000
570425,02
15864155,69
1068635,69
128586256,9
8901900,04
29393,88
126858346,88
1190011,46
2358411,95
139594,82
13929,74
11516,85
55742,78
96722,57
21408,86
717,01
54930,49
391,13
2118,64
Run Code Online (Sandbox Code Playgroud)

欢迎任何提示:)

谢谢 !

mkl*_*nt0 5

长话短说:博士

在格式字符串中使用0而不是:#

PS> $value = 128586256.9; $value.ToString('00000000000000000000.00')

00000000000128586256.90
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 或者,您可以将格式字符串构造为表达式

    • $value.ToString('0' * 20 + '.00')
  • 生成的字符串反映了相对于小数点的当前区域性;例如,fr-FR(法语)有效,,而不是.将被使用;您可以传递特定[cultureinfo]对象作为第二个参数来控制用于格式化的区域性;请参阅文档

  • 正如您的问题一样,我假设$value已经包含一个number,这意味着您已经将 CSV 列值(始终是字符串)转换为数字。

  • 例如,要将字符串区域性敏感地转换为数字,请使用[double]::Parse('1,2')(此方法也有一个重载,允许指定要使用的区域性)。

    • 警告:相比之下,PowerShell强制转换(例如[double] '1.2')在设计上始终保持区域性不变,并且仅识别.为小数点,而与当前有效的区域性无关。

Zerocukor287提供了关键指针:

  • 无条件地表示格式化字符串中的数字并0在没有可用数字的情况下默认为,请使用0.NET自定义数字格式字符串中的零占位符

  • 相比之下,#数字占位符只表示输入数字中实际存在的数字。

为了说明差异:

PS> (9.1).ToString('.##')

9.1  # only 1 decimal place available, nothing is output for the missing 2nd

PS> (9.1).ToString('.00')

9.10 # only 1 decimal place available, 0 is output for the missing 2nd
Run Code Online (Sandbox Code Playgroud)