反转百分比时获取原始数字

Get original number when reversing a percentage

提问人:Roy Givenchi 提问时间:8/20/2023 最后编辑:braXRoy Givenchi 更新时间:8/29/2023 访问量:86

问:

我正在尝试按百分比进行简单的价格更新,增加效果很好,但减法总是低于原始数字,即:

Increase: 1 + 5% = 1,05   //  Subtract: 1,05 - 5% = 0.998

如何更新我的代码以在减法后获得相同的数字?

这是我正在使用的代码:

Imports System.Data.SqlClient
Public Class Form1
    Private cmd As SqlCommand
    Private cnn As New SqlConnection
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim iofile As New System.IO.StreamReader(Application.StartupPath + "/connect.txt")
        Dim ioline As String
        ioline = iofile.ReadToEnd
        cnn = New SqlConnection(ioline)
        cnn.Open()
        cmd = New SqlCommand("update saprod_01 set price1=price1+(price1*@calc1/100); 
        update saprod_01 set price2=price2+(price2*@calc2/100); 
        update saprod_01 set price3=price3+(price3*@calc3/100);", cnn)
        cmd.Parameters.Add("@calc1", SqlDbType.Decimal).Value = TextBox1.Text
        cmd.Parameters.Add("@calc2", SqlDbType.Decimal).Value = TextBox2.Text
        cmd.Parameters.Add("@calc3", SqlDbType.Decimal).Value = TextBox3.Text
        cmd.ExecuteNonQuery()
        MessageBox.Show("Updated", "Updated", MessageBoxButtons.OK, MessageBoxIcon.Information)
    End Sub
End Class

其中 @calc1(和 2 和 2)将具有正整数值表示增加,负整数值表示减少。

sql-server vb.net

评论

2赞 Dale K 8/20/2023
如果减法的意思是反转,那只是简单的数学,除以 105 乘以 100
0赞 Roy Givenchi 8/20/2023
我知道数学答案,但我无法让它在我的代码中工作,你能给我一个我正在使用的代码的例子吗?,这个想法是输入例如:“5 或 -5”在文本框上并通过代码完成数学运算
0赞 Roy Givenchi 8/20/2023
Calc 值是用户输入
0赞 Roy Givenchi 8/20/2023
它们用于更新数据库上的三个价格列,我只是复制了完整的代码,对此感到抱歉
0赞 Roy Givenchi 8/20/2023
这就是这个想法,对每条记录进行全面更新

答:

3赞 Dale K 8/20/2023 #1

根据您的说明,以下内容应该可以满足您的需求。您可以只使用事例表达式来确定是使用公式来添加还是反转金额。

  • 注意:对于多列,您只需要一个更新语句。
update saprod_01 set
  price1 = case when @calc1 > 0
    then price1 * (100 + @calc1) / 100
    else price1 / (100 + @calc1) * 100
    end
  , price2 = case when @calc2 > 0
    then price2 * (100 + @calc2) / 100
    else price2 / (100 + @calc2) * 100
    end
  , price3 = case when @calc3 > 0
    then price3 * (100 + @calc3) / 100
    else price3 / (100 + @calc3) * 100
    end;
1赞 evolet herrington 8/20/2023 #2

这是一个解决方案:

要在应用百分比增加然后减少后获得原始数字,您需要除以 (1 + 百分比) 而不是减去百分比。

例如,将值增加 5% 后,您将得到 .要恢复它,您需要除以而不是减去 5%。value * 1.051.05

代码应调整为:

cmd = New SqlCommand("
update saprod_01 set price1=price1*(1 + @calc1/100); 
update saprod_01 set price2=price2*(1 + @calc2/100); 
update saprod_01 set price3=price3*(1 + @calc3/100);", cnn)

并减去或还原:

cmd = New SqlCommand("
update saprod_01 set price1=price1/(1 + @calc1/100); 
update saprod_01 set price2=price2/(1 + @calc2/100); 
update saprod_01 set price3=price3/(1 + @calc3/100);", cnn)

这种方法将确保您在减法后回到原始数字。