我正在创建一个脚本,将 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)
欢迎任何提示:)
谢谢 !
长话短说:博士:
在格式字符串中使用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')(此方法也有一个重载,允许指定要使用的区域性)。
[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)
| 归档时间: |
|
| 查看次数: |
10610 次 |
| 最近记录: |