Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA写入文件是舍入数值-如何防止?_Excel_Vba - Fatal编程技术网

Excel VBA写入文件是舍入数值-如何防止?

Excel VBA写入文件是舍入数值-如何防止?,excel,vba,Excel,Vba,在下面的代码中,我在确保文件编写器没有将我的数字四舍五入到某个小数位数时遇到问题。我需要使用一个变量,因为有时值是字符串,有时是数字 我怎样才能强迫它写下变量的确切含义呢?例如,下面的代码可能显示0.00038,我想显示确切的值 Dim MyFile1 As Variant Dim MyNumber as Variant MyFile0 = "C:/myfile.csv" fnum0 = FreeFile() Open MyFile0 For Output As fnum0 MyNumber

在下面的代码中,我在确保文件编写器没有将我的数字四舍五入到某个小数位数时遇到问题。我需要使用一个变量,因为有时值是字符串,有时是数字

我怎样才能强迫它写下变量的确切含义呢?例如,下面的代码可能显示0.00038,我想显示确切的值

Dim MyFile1 As Variant
Dim MyNumber as Variant

MyFile0 = "C:/myfile.csv"
fnum0 = FreeFile()
Open MyFile0 For Output As fnum0

MyNumber = 0.0003759656

Print #fnum0, MyNumber

你的代码很好。问题在于excel。在excel中打开CSV(包括通过VBA)时,excel会确定单元格是什么。通常,如果它像一个超过5个字符的数字,它将用科学记数法表示或四舍五入到5位

请注意,请确保您在使用CSV文件之前或从何处获取该文件,但以下是一些防止excel更改数据的选项:

在VBA中,使用Workbook.OpenText命令打开CSV,方法如下:

-将所有excel单元格显示为文本*

-该列存储的数字有很多小数位 (注:小数点后最多30位)

-作为文本存储的特定列

--这里有选项语法的完整列表

您也可以将CSV导入excel电子表格,它将为您提供为每个列选择数据类型的选项。然后对excel文件运行VBA


如果您没有在excel中执行公式,我建议您将数字存储为文本字符串。VBA会在需要时自动将数字字符串转换为数值。

您可能遇到浮点错误。它们是非常小的错误,当数字从基数10(人工)转换为基数2(计算机)时会发生。出于您的目的,您需要确定两个值不相等意味着什么。它不仅仅是
val1 val2
,因为这不会解释微小的错误。比如说,如果你在和钱打交道,你可能只关心一分钱。因此,您可以将不等式确定为
ABS(val1-val2)>.001
。您只需确定您对相等性的容忍度,并与该标准进行比较。

可能是您的数字没有存储为vba中的数字,而当您编写该数字时,Excel会将其转换。假设您的号码是1.789,然后将其写入格式为“GENERAL”的单元格中。Excel将写入1.79(并且认为这是数字,甚至不是格式问题)


我发现,如果你先把数字转换成十进制的CDEC(你的数字),它就能正确地写出来。为了更好地测量,我还验证了单元格是否为'.NUMBERFORMAT=“将军”

嗯,这对我来说不是圆满的。我在记事本中打开了
myfile.csv
,我可以看到完整的数字。然而,如果我在Excel中打开文件,那么数字将以科学记数法显示,但在公式栏中,我仍然可以看到完整的数字。我的结果与Siddhart Rout相同。是否确实没有在Excel中打开
myfile.csv
(它将显示四舍五入的值)?csv文件将其保存为原样。如果在excel中重新打开文件,则可能需要使用将单元格格式化为文本的模板,或者使用模式。ini@Everyone这只是一个例子。我在csv文件中比较两个“源”,并显示不匹配的位置。在VBA中检测val1 val2,然后在csv文件中输出val1和val2,但它们看起来相同。如果我在公式栏中单击,则数字完全相同(例如0.0003)。我假设我写变量的方式正在丢失信息?你是说打开CSV将数据写入时?