为什么四舍五入到 1 位的数字仍然写入具有许多位数的 Excel。
例如:
dim myvar as variant
dim mysingle as single
dim myrange as range
mysingle = 4567.23494376
myvar = round(mysingle,1)
myrange = "A1"
myrange.value = myvar
尽管我在写<code>myvar</code>,它已四舍五入到单元格A1的一位数字,尽管单元格显示4567.2,但单击单元格会显示整个值,所有数字位于公式栏尾数右侧。
我应该期待这种行为吗?
使用单精度几乎总是一个坏主意——Excel使用双精度——将单精度转换为双精度会带来麻烦——这段代码像你期望的那样为双精度工作,但是用单精度给出了你意想不到的答案,而没有涉及Round
Sub roundit()
Dim myvar As Variant
Dim myDouble As Double
Dim mySingle As Single
myDouble = 4567.23494376
mySingle = 4567.2
myvar = Round(myDouble, 1)
Range("a1").Value = myvar
Range("a2").Value = mySingle
End Sub
尝试myvar=Worksheet函数。圆形(my单,1)
而不是myvar=round(mysingle,1)
请参阅@YowE3K提供的以下信息
工作表功能。Round
始终返回类型为Variant/Double
的值,而Round
返回与输入参数
相同类型的值(在本例中为Single
)。
问题内容: 这是小代码来说明我所看到的 打印: 我要打印 我需要做什么? 问题答案: 在使用之前添加以下行: 查看其他舍入模式,看看哪种最适合您。 注意:此方法仅在JDK 1.6或更高版本中有效
问题内容: 在我的课程中,我被告知: 连续值大约在内存中表示,因此使用浮点数进行计算会产生舍入误差。这些是位模式的微小差异。因此,如果和为浮点,则测试是不安全的。 指的是Java。 这是真的?我已经将比较语句与s和s一起使用,并且从未遇到过舍入问题。我从来没有读过类似的教科书。虚拟机肯定占了这一切吗? 问题答案: 是真的。 这是如何在内存中以有限数量的位表示浮点值的固有限制。 例如,该程序显示“
问题内容: 我想将双精度数四舍五入到一定数量的小数,总是四舍五入。 例 四舍五入到.00 => 1.5679999到1.56 四舍五入至.000 => 1.5679999至1.567 我想要一个Double而不是一个连接字符串 问题答案: 只需替换为!
问题内容: 这两个电话有什么区别?(有没有?) 问题答案: 提到但没有直接解决的一个重要问题是 “精度” 和 “比例” 之间的区别以及它们在两个语句中的用法。 “精度” 是数字中有效数字的总数。 “比例” 是小数点右边的位数。 MathContext构造函数仅接受precision和RoundingMode作为参数,因此第一条语句中从未指定scale。 显然接受scale和RoundingMode
问题内容: 我想以一种优雅的方式将java日期向上或向下舍入到最近的分钟(或秒,小时,天)。 例如,日期“ 2012年1月25日星期三10:36:34 GMT”四舍五入到最接近的分钟将是“ 2012年1月25日星期三10:37:00 GMT”。 问题答案: 如果使用Apache commons- lang ,则可以使用DateUtils舍入日期:
除了重写当前进行字符串转换的方法外,还有什么好方法可以将其双精度/字符串表示形式四舍五入到小数点后3位?