我需要用基于文化格式的文本文件中的数字做一些数学工作,所以我可以得到1,234.56或者我可以得到1.234,56甚至1 234,56我认为。我原本以为,以获得当前的文化与将字符串转换为基于任意文化设置的数字
$culture = (Get-Culture).Name
然后,所有数字转换为en-US格式,做我的数学,并转换回原来的格式。然而,像这样简单的事情是行不通的。
$useCulture = New-Object System.Globalization.CultureInfo("en-US")
$value1 = "1,234.56"
$value2 = "1234,56"
[double]$value1 = $value1.ToString("f", $useCulture)
[double]$value2 = $value2.ToString("f", $useCulture)
$value1
$value2
我期望得到的两个值回1234.56,但第二个是回来为123456,所以很明显我不理解怎么样的ToString工作。我的猜测是,它假定它以en-US格式存在,因为这是我的机器配置的,然后它试图转换为相同的东西,并且在$ value2上它假定千位分隔符在错误的地方?在任何情况下,我会如何从任意格式转换为指定格式,以便我可以肯定总和是正确的,然后转换回原始的任意格式? 或者,我完全错过了一些东西,还有更好的方法来解决这个问题吗? 另外,如果可能的话,我希望能够使用PS 2.0来做到这一点,因为我不能依赖于要升级到更新版本的目标机器。
有趣的问题。你的意思是你需要解析的数字来自多种文化,但是你事先并不知道某个数字来源于哪种文化?如果是这样,有一个明确的可能性模糊('1.234'可能是一个数字少于2或超过1000),除非你有其他规则(例如,该数字将始终格式化2小数位或类似的东西) 。 – briantist
就是这样。我有一个脚本,用Autodesk Revit启动“日志”文件,然后运行一些命令并将时间输出到文本文件。日志文件使用VBScript,输出基于用户的文化设置。我希望我的脚本可以将该文本文件读入数组,然后根据需要重复,然后执行一些数学操作,如排序,抛出较低和较高的异常值,然后平均余下的值,然后以基于文化的格式将结果输出回控制台。我不想手动解决所有可能性,因为我不知道如何使用该工具。 – Gordon
是否有可能改变VBScript,以便将数字写入一种特定的文化('en-US'或其他任何,只要它是一致的),这样你知道如何读回它?如果您不想打扰原始数字,您甚至可以将它写入新文件或位置。 – briantist