截断文件中的浮点数

时间:2011-07-07 18:00:12

标签: floating-point pattern-matching

我正在开发一个生成几千个ASCII文件(约束)的工具,其内容包括浮点数。我想通过一个类似的工具来运行这些约束进行比较,这个工具无法处理超过20个小数位的浮点值。手动测试表明简单的截断就足够了。那么,如何将文件中的所有浮点值(由句点唯一标记)截断为不超过20个小数位?

谢谢,

乔恩

3 个答案:

答案 0 :(得分:1)

我肯定在Java和C中知道(几乎可以肯定在其他语言中)有格式化字符串的方法。 String.format()和printf()是一些很好的例子。这些可以通过以下方式用于案例:

printf("%.20f", myFloat); 

我会在一秒钟内找到一个提供更好说明的网站。

编辑:

这应该是一个足够好的链接来获得一个想法:

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

编辑:

如果您想使用sed,快速搜索会让sed看起来好像也有一个printf函数。我找到的例子是:

http://docstore.mik.ua/orelly/unix/sedawk/ch07_09.htm

答案 1 :(得分:1)

如果没有关于您的平台的更多信息以及您熟悉的语言/工具,很难说清楚。

如果您的文件采用逗号或制表符分隔或固定宽度格式,我会尝试使用电子表格应用程序(例如Windows上的Excel或其他平台上的Open Office)。

  1. 将文件导入电子表格应用程序
  2. 更改相关列的格式
  3. 将文件导出为相同格式
  4. 如果它更复杂,你可以尝试使用perl或python。

    像sed(或perl)这样的工具的相关正则表达式是:

    s/^([0-9]*\.)([0-9]{20})([0-9]*)$/\1\2/g
    

    这个正则表达式基本上匹配任何数字字符串和一个'。'在里面。它将它分为三个部分:前面和后面包括'。',接下来的20个数字和剩余的数字。然后它输出前两个部分。你应该可以修改它以匹配你的实际模式,而不会使用regular expression reference

答案 2 :(得分:0)

至少有两种方法可以解决这个问题:

  1. 编写另一个工具,仅用于解析您的文件集。
  2. 在您正在创建的工具中实现某种设置。此设置将控制计算项目中的值或仅在数据存储结构中输出的所有函数的输出。
  3. 我认为第二种方式是最好的,因为它不依赖于格式化文件。