【问题标题】:round up to next multiple of 10 vb向上舍入到 10 vb 的下一个倍数
【发布时间】:2015-12-21 00:40:02
【问题描述】:

如何在 VB 中将值向上舍入到 10 的下一个倍数?

例如

19 -> 20
35 -> 40
21 -> 30

我发现有人说使用圆形函数,但是当我将它输入到我的 IDE(Microsoft Visual Studio Express 2015)时,它无法识别它。

提前致谢

【问题讨论】:

  • 谷歌搜索 round up to next multiple of 10 in visual basic 似乎会产生很多结果,例如stackoverflow.com/questions/326476/…。似乎有更多的方法不仅仅是round()
  • 我试过了,但它无法识别圆形 round(X/N)*N
  • 感谢@CodeiSir 完美运行

标签: vb.net visual-studio-2015 rounding


【解决方案1】:

使用ceiling 函数进行四舍五入。 (信息here

myNumber = Math.Ceiling(myNumber / 10) * 10

先将它除以 10,然后再乘以 10 就可以了。

更新:如果您想知道,整数没有问题

【讨论】:

  • 这不是一个很好的解决方案。可用的Math.Ceiling 仅有两个重载用于DoubleDecimal。在Integer 的情况下,对Math.Ceiling 的调用将转换为Double。这可能会导致舍入错误。
  • 投反对票的意思是“这个答案没有用”,你为什么投反对票?因为使用函数具有函数的效果,为此使用它就可以了。
  • 拒绝投票用于“最没用”而非“无用”的答案。在您的回答中,您正在做一些仅适用于Option Strict Off 的类型转换。如果你设置Option Strict On 那么这段代码甚至不会编译。这不是一个好的稳健解决方案。
  • 你说没有人应该使用Math.Ceiling,但这只是你的意见。答案绝不是错误的。无论如何,他想使用round,所以这正是他想要的。
  • @Enigmativity Math.Ceiling(CDec(myNumber) / 10) * 10 编译良好,即使使用 Option Sctrict On
【解决方案2】:

这是一个基于Integer 的解决方案。

myNumber = If(myNumber Mod 10 = 0, myNumber, If(myNumber > 0, 10, 0) + 10 * (myNumber \ 10))

它不受四舍五入的影响,而且比使用 Math.Ceiling 至少快 2 倍。

【讨论】:

  • Math.Ceiling 在整数上不受精度影响。您可以用双精度表示最多 53 位整数而不会丢失,但是 VB 只使用 32 位整数。这就是为什么 Integer 可以随时转换为 Double 的原因。 (msdn.microsoft.com/en-us/library/…) 也祝mod 双打好运。
  • @CodeiSir - 双打的mod 在哪里?
  • @Enigmativity OP 的问题没有明确将输入定义为integer,您将其解释为这样。我认为“thisNum 是一个字符串”足以暗示这一事实 :-) 如果我需要使用 integer 来执行此操作,那么您的方法会得到我的投票!
  • @Jeroen - 你从哪里得到“thisNum 是一个字符串”?这不在 OP 的问题或任何 cmets 中。
  • @Enigmativity 我把这句话当成玩笑了,你竟然回应了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多